From ee4cd7e345f9d47470cad660ba9ce3d9e9276ff9 Mon Sep 17 00:00:00 2001 From: Carl Pearson Date: Tue, 17 Dec 2024 09:15:34 -0700 Subject: [PATCH] Add iamax, nrm1, nrm2 examples Signed-off-by: Carl Pearson --- example/wiki/blas/CMakeLists.txt | 15 ++++++++ example/wiki/blas/KokkosBlas1_wiki_iamax.cpp | 40 ++++++++++++++++++++ example/wiki/blas/KokkosBlas1_wiki_nrm1.cpp | 16 ++++++++ example/wiki/blas/KokkosBlas1_wiki_nrm2.cpp | 17 +++++++++ 4 files changed, 88 insertions(+) create mode 100644 example/wiki/blas/KokkosBlas1_wiki_iamax.cpp create mode 100644 example/wiki/blas/KokkosBlas1_wiki_nrm1.cpp create mode 100644 example/wiki/blas/KokkosBlas1_wiki_nrm2.cpp diff --git a/example/wiki/blas/CMakeLists.txt b/example/wiki/blas/CMakeLists.txt index 245957bc89..48ba85f4d6 100644 --- a/example/wiki/blas/CMakeLists.txt +++ b/example/wiki/blas/CMakeLists.txt @@ -3,6 +3,21 @@ KOKKOSKERNELS_INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}) KOKKOSKERNELS_INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/../../../../test_common) +KOKKOSKERNELS_ADD_EXECUTABLE_AND_TEST( + wiki_blas1_iamax + SOURCES KokkosBlas1_wiki_iamax.cpp + ) + +KOKKOSKERNELS_ADD_EXECUTABLE_AND_TEST( + wiki_blas1_nrm1 + SOURCES KokkosBlas1_wiki_nrm1.cpp + ) + +KOKKOSKERNELS_ADD_EXECUTABLE_AND_TEST( + wiki_blas1_nrm2 + SOURCES KokkosBlas1_wiki_nrm2.cpp + ) + KOKKOSKERNELS_ADD_EXECUTABLE_AND_TEST( wiki_blas2_ger SOURCES KokkosBlas2_wiki_ger.cpp diff --git a/example/wiki/blas/KokkosBlas1_wiki_iamax.cpp b/example/wiki/blas/KokkosBlas1_wiki_iamax.cpp new file mode 100644 index 0000000000..ca92605be8 --- /dev/null +++ b/example/wiki/blas/KokkosBlas1_wiki_iamax.cpp @@ -0,0 +1,40 @@ +#include +#include +#include + +int main(int argc, char* argv[]) { + Kokkos::initialize(); + { + int N = atoi(argv[1]); + + using ViewType = Kokkos::View; + using Scalar = typename ViewType::non_const_value_type; + using AT = Kokkos::Details::ArithTraits; + using mag_type = typename AT::mag_type; + using size_type = typename ViewType::size_type; + + ViewType x("X", N); + + typename ViewType::HostMirror h_x = Kokkos::create_mirror_view(x); + + Kokkos::Random_XorShift64_Pool rand_pool(13718); + Kokkos::fill_random(x, rand_pool, Scalar(10)); + + Kokkos::deep_copy(h_x, x); + + size_type max_loc = KokkosBlas::iamax(x); + + mag_type expected_result = Kokkos::Details::ArithTraits::min(); + size_type expected_max_loc = 0; + for (int i = 0; i < N; i++) { + mag_type val = AT::abs(h_x(i)); + if (val > expected_result) { + expected_result = val; + expected_max_loc = i + 1; + } + } + + printf("Iamax of X: %i, Expected: %i\n", max_loc, expected_max_loc); + } + Kokkos::finalize(); +} diff --git a/example/wiki/blas/KokkosBlas1_wiki_nrm1.cpp b/example/wiki/blas/KokkosBlas1_wiki_nrm1.cpp new file mode 100644 index 0000000000..4f9373f9c2 --- /dev/null +++ b/example/wiki/blas/KokkosBlas1_wiki_nrm1.cpp @@ -0,0 +1,16 @@ +#include +#include +#include + +int main(int argc, char* argv[]) { + Kokkos::initialize(); + { + Kokkos::View x("X", 100); + Kokkos::deep_copy(x, -3.0); + + double x_nrm = KokkosBlas::nrm1(x); + + std::cout << "X_nrm: " << x_nrm << " Expected: " << 100 * 3.0 << std::endl; + } + Kokkos::finalize(); +} diff --git a/example/wiki/blas/KokkosBlas1_wiki_nrm2.cpp b/example/wiki/blas/KokkosBlas1_wiki_nrm2.cpp new file mode 100644 index 0000000000..8b0ad3177b --- /dev/null +++ b/example/wiki/blas/KokkosBlas1_wiki_nrm2.cpp @@ -0,0 +1,17 @@ +#include +#include +#include +#include + +int main(int argc, char* argv[]) { + Kokkos::initialize(); + { + Kokkos::View x("X", 100); + Kokkos::deep_copy(x, 3.0); + + double x_nrm = KokkosBlas::nrm2(x); + + std::cout << "X_nrm: " << x_nrm << " Expected: " << std::sqrt(100 * 3.0 * 3.0) << std::endl; + } + Kokkos::finalize(); +}