Update Kokkos library in LAMMPS to v3.3.0
This commit is contained in:
@ -308,9 +308,16 @@ struct TestReducers {
|
||||
Scalar init = 0;
|
||||
|
||||
{
|
||||
Scalar sum_scalar = init;
|
||||
Scalar sum_scalar = Scalar(1);
|
||||
Kokkos::Sum<Scalar> reducer_scalar(sum_scalar);
|
||||
|
||||
Kokkos::parallel_reduce(Kokkos::RangePolicy<ExecSpace>(0, 0), f,
|
||||
reducer_scalar);
|
||||
// Zero length reduction not yet supported
|
||||
#ifndef KOKKOS_ENABLE_OPENMPTARGET
|
||||
ASSERT_EQ(sum_scalar, init);
|
||||
#endif
|
||||
|
||||
Kokkos::parallel_reduce(Kokkos::RangePolicy<ExecSpace>(0, N), f,
|
||||
reducer_scalar);
|
||||
ASSERT_EQ(sum_scalar, reference_sum);
|
||||
@ -326,18 +333,48 @@ struct TestReducers {
|
||||
|
||||
{
|
||||
Kokkos::View<Scalar, Kokkos::HostSpace> sum_view("View");
|
||||
sum_view() = init;
|
||||
sum_view() = Scalar(1);
|
||||
Kokkos::Sum<Scalar> reducer_view(sum_view);
|
||||
Kokkos::parallel_reduce(Kokkos::RangePolicy<ExecSpace>(0, 0), f,
|
||||
reducer_view);
|
||||
Kokkos::fence();
|
||||
Scalar sum_view_scalar = sum_view();
|
||||
// Zero length reduction not yet supported
|
||||
#ifndef KOKKOS_ENABLE_OPENMPTARGET
|
||||
ASSERT_EQ(sum_view_scalar, init);
|
||||
#endif
|
||||
|
||||
Kokkos::parallel_reduce(Kokkos::RangePolicy<ExecSpace>(0, N), f,
|
||||
reducer_view);
|
||||
Kokkos::fence();
|
||||
|
||||
Scalar sum_view_scalar = sum_view();
|
||||
sum_view_scalar = sum_view();
|
||||
ASSERT_EQ(sum_view_scalar, reference_sum);
|
||||
|
||||
Scalar sum_view_view = reducer_view.reference();
|
||||
ASSERT_EQ(sum_view_view, reference_sum);
|
||||
}
|
||||
|
||||
// Reduction to device view not yet supported
|
||||
#ifndef KOKKOS_ENABLE_OPENMPTARGET
|
||||
{
|
||||
Kokkos::View<Scalar, typename ExecSpace::memory_space> sum_view("View");
|
||||
Kokkos::deep_copy(sum_view, Scalar(1));
|
||||
Kokkos::Sum<Scalar, typename ExecSpace::memory_space> reducer_view(
|
||||
sum_view);
|
||||
Kokkos::parallel_reduce(Kokkos::RangePolicy<ExecSpace>(0, 0), f,
|
||||
reducer_view);
|
||||
Kokkos::fence();
|
||||
Scalar sum_view_scalar;
|
||||
Kokkos::deep_copy(sum_view_scalar, sum_view);
|
||||
ASSERT_EQ(sum_view_scalar, init);
|
||||
|
||||
Kokkos::parallel_reduce(Kokkos::RangePolicy<ExecSpace>(0, N), f,
|
||||
reducer_view);
|
||||
Kokkos::fence();
|
||||
Kokkos::deep_copy(sum_view_scalar, sum_view);
|
||||
ASSERT_EQ(sum_view_scalar, reference_sum);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
static void test_prod(int N) {
|
||||
@ -358,8 +395,14 @@ struct TestReducers {
|
||||
Scalar init = 1;
|
||||
|
||||
{
|
||||
Scalar prod_scalar = init;
|
||||
Scalar prod_scalar = Scalar(0);
|
||||
Kokkos::Prod<Scalar> reducer_scalar(prod_scalar);
|
||||
Kokkos::parallel_reduce(Kokkos::RangePolicy<ExecSpace>(0, 0), f,
|
||||
reducer_scalar);
|
||||
// Zero length reduction not yet supported
|
||||
#ifndef KOKKOS_ENABLE_OPENMPTARGET
|
||||
ASSERT_EQ(prod_scalar, init);
|
||||
#endif
|
||||
|
||||
Kokkos::parallel_reduce(Kokkos::RangePolicy<ExecSpace>(0, N), f,
|
||||
reducer_scalar);
|
||||
@ -376,18 +419,48 @@ struct TestReducers {
|
||||
|
||||
{
|
||||
Kokkos::View<Scalar, Kokkos::HostSpace> prod_view("View");
|
||||
prod_view() = init;
|
||||
prod_view() = Scalar(0);
|
||||
Kokkos::Prod<Scalar> reducer_view(prod_view);
|
||||
Kokkos::parallel_reduce(Kokkos::RangePolicy<ExecSpace>(0, 0), f,
|
||||
reducer_view);
|
||||
Kokkos::fence();
|
||||
Scalar prod_view_scalar = prod_view();
|
||||
// Zero length reduction not yet supported
|
||||
#ifndef KOKKOS_ENABLE_OPENMPTARGET
|
||||
ASSERT_EQ(prod_view_scalar, init);
|
||||
#endif
|
||||
|
||||
Kokkos::parallel_reduce(Kokkos::RangePolicy<ExecSpace>(0, N), f,
|
||||
reducer_view);
|
||||
Kokkos::fence();
|
||||
|
||||
Scalar prod_view_scalar = prod_view();
|
||||
prod_view_scalar = prod_view();
|
||||
ASSERT_EQ(prod_view_scalar, reference_prod);
|
||||
|
||||
Scalar prod_view_view = reducer_view.reference();
|
||||
ASSERT_EQ(prod_view_view, reference_prod);
|
||||
}
|
||||
|
||||
// Reduction to device view not yet supported
|
||||
#ifndef KOKKOS_ENABLE_OPENMPTARGET
|
||||
{
|
||||
Kokkos::View<Scalar, typename ExecSpace::memory_space> prod_view("View");
|
||||
Kokkos::deep_copy(prod_view, Scalar(0));
|
||||
Kokkos::Prod<Scalar, typename ExecSpace::memory_space> reducer_view(
|
||||
prod_view);
|
||||
Kokkos::parallel_reduce(Kokkos::RangePolicy<ExecSpace>(0, 0), f,
|
||||
reducer_view);
|
||||
Kokkos::fence();
|
||||
Scalar prod_view_scalar;
|
||||
Kokkos::deep_copy(prod_view_scalar, prod_view);
|
||||
ASSERT_EQ(prod_view_scalar, init);
|
||||
|
||||
Kokkos::parallel_reduce(Kokkos::RangePolicy<ExecSpace>(0, N), f,
|
||||
reducer_view);
|
||||
Kokkos::fence();
|
||||
Kokkos::deep_copy(prod_view_scalar, prod_view);
|
||||
ASSERT_EQ(prod_view_scalar, reference_prod);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
static void test_min(int N) {
|
||||
@ -945,9 +1018,12 @@ struct TestReducers {
|
||||
test_minmaxloc(10007);
|
||||
}
|
||||
|
||||
// NOTE test_prod generates N random numbers between 1 and 4.
|
||||
// Although unlikely, the test below could still in principle overflow.
|
||||
// For reference log(numeric_limits<int>)/log(4) is 15.5
|
||||
static void execute_integer() {
|
||||
test_sum(10001);
|
||||
test_prod(35);
|
||||
test_prod(sizeof(Scalar) > 4 ? 35 : 19); // avoid int overflow (see above)
|
||||
test_min(10003);
|
||||
test_minloc(10003);
|
||||
test_max(10007);
|
||||
|
||||
Reference in New Issue
Block a user