Update Kokkos library in LAMMPS to v3.3.0

This commit is contained in:
Stan Gerald Moore
2020-12-22 08:52:37 -07:00
parent b36363e0fb
commit eea14c55a9
927 changed files with 18603 additions and 46876 deletions

View File

@ -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);