Update Kokkos library in LAMMPS to v4.3.0

This commit is contained in:
Stan Gerald Moore
2024-04-05 08:20:57 -06:00
parent 2927471892
commit f382eac5c2
393 changed files with 13253 additions and 12499 deletions

View File

@ -209,4 +209,165 @@ class shift_left {
}
};
class cbrt_op {
public:
template <typename T>
auto on_host(T const& a) const {
#if defined(KOKKOS_ENABLE_DEPRECATED_CODE_4)
return Kokkos::Experimental::cbrt(a);
#else
return Kokkos::cbrt(a);
#endif
}
template <typename T>
auto on_host_serial(T const& a) const {
return Kokkos::cbrt(a);
}
};
class exp_op {
public:
template <typename T>
auto on_host(T const& a) const {
#if defined(KOKKOS_ENABLE_DEPRECATED_CODE_4)
return Kokkos::Experimental::exp(a);
#else
return Kokkos::exp(a);
#endif
}
template <typename T>
auto on_host_serial(T const& a) const {
return Kokkos::exp(a);
}
};
class log_op {
public:
template <typename T>
auto on_host(T const& a) const {
#if defined(KOKKOS_ENABLE_DEPRECATED_CODE_4)
return Kokkos::Experimental::log(a);
#else
return Kokkos::log(a);
#endif
}
template <typename T>
auto on_host_serial(T const& a) const {
return Kokkos::log(a);
}
};
class hmin {
public:
template <typename T>
auto on_host(T const& a) const {
return Kokkos::Experimental::hmin(a);
}
template <typename T>
auto on_host_serial(T const& a) const {
using DataType = typename T::value_type::value_type;
auto const& v = a.impl_get_value();
auto const& m = a.impl_get_mask();
auto result = Kokkos::reduction_identity<DataType>::min();
for (std::size_t i = 0; i < v.size(); ++i) {
if (m[i]) result = Kokkos::min(result, v[i]);
}
return result;
}
template <typename T>
KOKKOS_INLINE_FUNCTION auto on_device(T const& a) const {
return Kokkos::Experimental::hmin(a);
}
template <typename T>
KOKKOS_INLINE_FUNCTION auto on_device_serial(T const& a) const {
using DataType = typename T::value_type::value_type;
auto const& v = a.impl_get_value();
auto const& m = a.impl_get_mask();
auto result = Kokkos::reduction_identity<DataType>::min();
for (std::size_t i = 0; i < v.size(); ++i) {
if (m[i]) result = Kokkos::min(result, v[i]);
}
return result;
}
};
class hmax {
public:
template <typename T>
auto on_host(T const& a) const {
return Kokkos::Experimental::hmax(a);
}
template <typename T>
auto on_host_serial(T const& a) const {
using DataType = typename T::value_type::value_type;
auto const& v = a.impl_get_value();
auto const& m = a.impl_get_mask();
auto result = Kokkos::reduction_identity<DataType>::max();
for (std::size_t i = 0; i < v.size(); ++i) {
if (m[i]) result = Kokkos::max(result, v[i]);
}
return result;
}
template <typename T>
KOKKOS_INLINE_FUNCTION auto on_device(T const& a) const {
return Kokkos::Experimental::hmax(a);
}
template <typename T>
KOKKOS_INLINE_FUNCTION auto on_device_serial(T const& a) const {
using DataType = typename T::value_type::value_type;
auto const& v = a.impl_get_value();
auto const& m = a.impl_get_mask();
auto result = Kokkos::reduction_identity<DataType>::max();
for (std::size_t i = 0; i < v.size(); ++i) {
if (m[i]) result = Kokkos::max(result, v[i]);
}
return result;
}
};
class reduce {
public:
template <typename T>
auto on_host(T const& a) const {
using DataType = typename T::value_type::value_type;
return Kokkos::Experimental::reduce(a, DataType(0), std::plus<>());
}
template <typename T>
auto on_host_serial(T const& a) const {
using DataType = typename T::value_type::value_type;
auto const& v = a.impl_get_value();
auto const& m = a.impl_get_mask();
auto result = Kokkos::reduction_identity<DataType>::sum();
for (std::size_t i = 0; i < v.size(); ++i) {
if (m[i]) result += v[i];
}
return result;
}
template <typename T>
KOKKOS_INLINE_FUNCTION auto on_device(T const& a) const {
using DataType = typename T::value_type::value_type;
return Kokkos::Experimental::reduce(a, DataType(0), std::plus<>());
}
template <typename T>
KOKKOS_INLINE_FUNCTION auto on_device_serial(T const& a) const {
using DataType = typename T::value_type::value_type;
auto const& v = a.impl_get_value();
auto const& m = a.impl_get_mask();
auto result = Kokkos::reduction_identity<DataType>::sum();
for (std::size_t i = 0; i < v.size(); ++i) {
if (m[i]) result += v[i];
}
return result;
}
};
#endif