Update Kokkos library in LAMMPS to v4.3.0
This commit is contained in:
@ -131,7 +131,9 @@ struct TestFunctorA {
|
||||
}
|
||||
};
|
||||
|
||||
template <class LayoutTag, class ValueType>
|
||||
struct InPlace {};
|
||||
|
||||
template <class LayoutTag, class ValueType, class InPlaceOrVoid = void>
|
||||
void test_A(std::size_t numTeams, std::size_t numCols, int apiId) {
|
||||
/* description:
|
||||
use a rank-2 view randomly filled with values,
|
||||
@ -157,9 +159,6 @@ void test_A(std::size_t numTeams, std::size_t numCols, int apiId) {
|
||||
using space_t = Kokkos::DefaultExecutionSpace;
|
||||
Kokkos::TeamPolicy<space_t> policy(numTeams, Kokkos::AUTO());
|
||||
|
||||
// create the destination view
|
||||
Kokkos::View<ValueType**> destView("destView", numTeams, numCols);
|
||||
|
||||
// tranform_inclusive_scan returns an iterator so to verify that it is correct
|
||||
// each team stores the distance of the returned iterator from the beginning
|
||||
// of the interval that team operates on and then we check that these
|
||||
@ -179,12 +178,21 @@ void test_A(std::size_t numTeams, std::size_t numCols, int apiId) {
|
||||
rand_pool pool(lowerBound * upperBound);
|
||||
Kokkos::fill_random(initValuesView_h, pool, lowerBound, upperBound);
|
||||
|
||||
// use CTAD for functor
|
||||
auto initValuesView =
|
||||
Kokkos::create_mirror_view_and_copy(space_t(), initValuesView_h);
|
||||
TestFunctorA fnc(sourceView, destView, distancesView, intraTeamSentinelView,
|
||||
initValuesView, binaryOp, unaryOp, apiId);
|
||||
Kokkos::parallel_for(policy, fnc);
|
||||
|
||||
// create the destination view
|
||||
Kokkos::View<ValueType**> destView("destView", numTeams, numCols);
|
||||
if constexpr (std::is_same_v<InPlaceOrVoid, InPlace>) {
|
||||
TestFunctorA fnc(sourceView, sourceView, distancesView,
|
||||
intraTeamSentinelView, initValuesView, binaryOp, unaryOp,
|
||||
apiId);
|
||||
Kokkos::parallel_for(policy, fnc);
|
||||
} else {
|
||||
TestFunctorA fnc(sourceView, destView, distancesView, intraTeamSentinelView,
|
||||
initValuesView, binaryOp, unaryOp, apiId);
|
||||
Kokkos::parallel_for(policy, fnc);
|
||||
}
|
||||
|
||||
// -----------------------------------------------
|
||||
// run cpp-std kernel and check
|
||||
@ -236,16 +244,21 @@ void test_A(std::size_t numTeams, std::size_t numCols, int apiId) {
|
||||
}
|
||||
#undef transform_inclusive_scan
|
||||
|
||||
auto dataViewAfterOp_h = create_host_space_copy(destView);
|
||||
expect_equal_host_views(stdDestView, dataViewAfterOp_h);
|
||||
if constexpr (std::is_same_v<InPlaceOrVoid, InPlace>) {
|
||||
auto dataViewAfterOp_h = create_host_space_copy(sourceView);
|
||||
expect_equal_host_views(stdDestView, dataViewAfterOp_h);
|
||||
} else {
|
||||
auto dataViewAfterOp_h = create_host_space_copy(destView);
|
||||
expect_equal_host_views(stdDestView, dataViewAfterOp_h);
|
||||
}
|
||||
}
|
||||
|
||||
template <class LayoutTag, class ValueType>
|
||||
template <class LayoutTag, class ValueType, class InPlaceOrVoid = void>
|
||||
void run_all_scenarios() {
|
||||
for (int numTeams : teamSizesToTest) {
|
||||
for (const auto& numCols : {0, 1, 2, 13, 101, 1444, 8153}) {
|
||||
for (int apiId : {0, 1, 2, 3}) {
|
||||
test_A<LayoutTag, ValueType>(numTeams, numCols, apiId);
|
||||
test_A<LayoutTag, ValueType, InPlaceOrVoid>(numTeams, numCols, apiId);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -255,6 +268,10 @@ TEST(std_algorithms_transform_inclusive_scan_team_test, test) {
|
||||
run_all_scenarios<DynamicTag, double>();
|
||||
run_all_scenarios<StridedTwoRowsTag, int>();
|
||||
run_all_scenarios<StridedThreeRowsTag, unsigned>();
|
||||
|
||||
run_all_scenarios<DynamicTag, double, InPlace>();
|
||||
run_all_scenarios<StridedTwoRowsTag, int, InPlace>();
|
||||
run_all_scenarios<StridedThreeRowsTag, unsigned, InPlace>();
|
||||
}
|
||||
|
||||
} // namespace TeamTransformInclusiveScan
|
||||
|
||||
Reference in New Issue
Block a user