1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71
|
//@HEADER
// ************************************************************************
//
// Kokkos v. 4.0
// Copyright (2022) National Technology & Engineering
// Solutions of Sandia, LLC (NTESS).
//
// Under the terms of Contract DE-NA0003525 with NTESS,
// the U.S. Government retains certain rights in this software.
//
// Part of Kokkos, under the Apache 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 <TestHIP_Category.hpp>
namespace Test {
struct TestNone {
Kokkos::View<size_t*, TEST_EXECSPACE> view;
KOKKOS_INLINE_FUNCTION
void operator()(const int i) const { view(i) = i; }
TestNone() { view = Kokkos::View<size_t*, TEST_EXECSPACE>("dummy", 1); }
};
struct TestSpiller {
Kokkos::View<size_t*, TEST_EXECSPACE> view;
KOKKOS_INLINE_FUNCTION
void operator()(const int i) const {
size_t array[1000] = {0};
// and update flag
size_t value = 0;
for (int ii = i; ii < 1000; ++ii) {
array[ii] = value;
value += ii;
}
for (int ii = i; ii < 1000; ++ii) {
value *= array[ii];
}
Kokkos::atomic_add(&view[0], value);
}
TestSpiller() { view = Kokkos::View<size_t*, TEST_EXECSPACE>("dummy", 1); }
};
TEST(hip, preferred_blocksize_deduction) {
using execution_space =
typename Kokkos::Impl::FunctorPolicyExecutionSpace<TestSpiller,
void>::execution_space;
using policy = Kokkos::RangePolicy<execution_space>;
{
using DriverType = Kokkos::Impl::ParallelFor<TestNone, policy>;
ASSERT_TRUE(Kokkos::Impl::HIPParallelLaunch<DriverType>::get_scratch_size(
execution_space().hip_device()) == 0);
}
{
using DriverType = Kokkos::Impl::ParallelFor<TestSpiller, policy>;
ASSERT_TRUE(Kokkos::Impl::HIPParallelLaunch<DriverType>::get_scratch_size(
execution_space().hip_device()) > 0);
}
}
} // namespace Test
|