1 #ifndef VIEW_ARITHMETIC_HPP
2 #define VIEW_ARITHMETIC_HPP
18 template<
typename V1,
typename V2,
typename T>
20 if (dest_view.size() != added_view.size())
exit_XGC(
"\nWARNING: dest_view and added_view are not the same size");
24 Kokkos::parallel_for(
"host_add_ay_to_x", Kokkos::RangePolicy<HostExSpace>( 0, dest_view.size()), KOKKOS_LAMBDA(
const int idx){
25 ptrs.x[idx] += coeff*ptrs.y[idx];
30 template<
typename V1,
typename V2>
32 if (dest_view.size() != multiplier_view.size())
exit_XGC(
"\nWARNING: dest_view and multiplier_view are not the same size");
36 Kokkos::parallel_for(
"host_multiply_x_by_y", Kokkos::RangePolicy<HostExSpace>( 0, dest_view.size()), KOKKOS_LAMBDA(
const int idx){
37 ptrs.x[idx] *= ptrs.y[idx];
42 template<
typename V1,
typename V2>
44 if (dest_view.size() != divisor_view.size())
exit_XGC(
"\nWARNING: dest_view and divisor_view are not the same size");
48 Kokkos::parallel_for(
"host_divide_x_by_y", Kokkos::RangePolicy<HostExSpace>( 0, dest_view.size()), KOKKOS_LAMBDA(
const int idx){
49 ptrs.x[idx] /= ptrs.y[idx];
54 template<
typename V1,
typename T>
56 double coeff_inv = 1.0/coeff;
60 Kokkos::parallel_for(
"host_divide_x_by_a", Kokkos::RangePolicy<HostExSpace>( 0, dest_view.size()), KOKKOS_LAMBDA(
const int idx){
61 ptrs.x[idx] *= coeff_inv;
68 inline typename T::value_type
sum_view(
const T& view){
70 View<typename T::value_type*,CLayout, typename T::device_type, Kokkos::MemoryTraits<Kokkos::Unmanaged>> view_1D(view.data(), view.size());
72 typename T::value_type sum = 0;
73 Kokkos::parallel_reduce(
"sum", Kokkos::RangePolicy<typename T::execution_space>( 0,view.size() ), KOKKOS_LAMBDA(
const int i,
typename T::value_type& sum_l){
83 inline typename T::value_type
max_view(
const T& view){
85 View<typename T::value_type*,CLayout, typename T::device_type, Kokkos::MemoryTraits<Kokkos::Unmanaged>> view_1D(view.data(), view.size());
87 typename T::value_type maxval = 0;
88 Kokkos::parallel_reduce(
"maxval", Kokkos::RangePolicy<typename T::execution_space>( 0,view.size() ), KOKKOS_LAMBDA(
const int i,
typename T::value_type& maxval_l){
89 maxval_l = max(maxval_l, view_1D(i));
90 }, Kokkos::Max<typename T::value_type,HostType>(maxval));
void host_divide_x_by_y(V1 &dest_view, const V2 &divisor_view)
Definition: view_arithmetic.hpp:43
void host_multiply_x_by_y(V1 &dest_view, const V2 &multiplier_view)
Definition: view_arithmetic.hpp:31
T::value_type max_view(const T &view)
Definition: view_arithmetic.hpp:83
void host_add_ay_to_x(V1 &dest_view, const V2 &added_view, T coeff)
Definition: view_arithmetic.hpp:19
T * y
Definition: view_arithmetic.hpp:12
ViewArithmeticPointers(T *x, T *y)
Definition: view_arithmetic.hpp:14
T::value_type sum_view(const T &view)
Definition: view_arithmetic.hpp:68
void exit_XGC(std::string msg)
Definition: globals.hpp:37
void parallel_for(const std::string name, int n_ptl, Function func, Option option, HostAoSoA aosoa_h, DeviceAoSoA aosoa_d)
Definition: streamed_parallel_for.hpp:252
Definition: view_arithmetic.hpp:10
T * x
Definition: view_arithmetic.hpp:11
void host_divide_x_by_a(V1 &dest_view, T coeff)
Definition: view_arithmetic.hpp:55