Update Kokkos library in LAMMPS to v4.3.0
This commit is contained in:
@ -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
|
||||
|
||||
Reference in New Issue
Block a user