17#include <TRUSTTab_tools.tpp>
18#include <MD_Vector_seq.h>
23template <
typename ExecSpace,
typename _TYPE_>
33 for (
int j = 0; j < lsize; j++) norme_colonne[j] = 0;
35 auto tableau_view = tableau.template view_ro<2, ExecSpace>();
36 auto norme_colonne_view = norme_colonne.template view_rw<1, ExecSpace>();
38 if (nblocs_left>3) ToDo_Kokkos(
"nblocs_left too high, optimize by rewriting as local_operations_vect_bis_generic_kernel");
40 for (; nblocs_left; nblocs_left--)
42 const int begin_bloc = (*(bloc_itr++)), end_bloc = (*(bloc_itr++));
43 if (begin_bloc<end_bloc)
45 Kokkos::RangePolicy<ExecSpace> policy(begin_bloc, end_bloc);
47 for (
int j=0; j<lsize; j++)
49 if (statistics().get_use_gpu()) start_gpu_timer(__KERNEL_NAME__);
50 Kokkos::parallel_reduce(policy,
51 KOKKOS_LAMBDA(
const int i, _TYPE_& local_sum)
53 const _TYPE_ x = tableau_view(i,j);
57 Kokkos::Sum<_TYPE_, ExecSpace>(Kokkos::subview(norme_colonne_view,j)));
59 bool kernelOnDevice = is_default_exec_space<ExecSpace>;
60 if (statistics().get_use_gpu()) end_gpu_timer(__KERNEL_NAME__, kernelOnDevice);
68template <
typename _TYPE_>
75 local_carre_norme_tab_kernel<Kokkos::DefaultExecutionSpace, _TYPE_>(tableau, norme_colonne);
77 local_carre_norme_tab_kernel<Kokkos::DefaultHostExecutionSpace, _TYPE_>(tableau, norme_colonne);
82template <
typename ExecSpace,
typename _TYPE_>
92 for (
int j = 0; j < lsize; j++) max_colonne[j] = 0;
95 auto tableau_view= tableau.template view_ro<2, ExecSpace>();
96 auto max_colonne_view= max_colonne.template view_rw<1, ExecSpace>();
98 if (nblocs_left>3) ToDo_Kokkos(
"nblocs_left too high, optimize by rewriting as local_operations_vect_bis_generic_kernel");
100 for (; nblocs_left; nblocs_left--)
102 const int begin_bloc = (*(bloc_itr++)), end_bloc = (*(bloc_itr++));
103 if (begin_bloc<end_bloc)
105 Kokkos::RangePolicy<ExecSpace> policy(begin_bloc, end_bloc);
107 for (
int j=0; j<lsize; j++)
109 if (statistics().get_use_gpu()) start_gpu_timer(__KERNEL_NAME__);
110 Kokkos::parallel_reduce(policy,
111 KOKKOS_LAMBDA(
const int i, _TYPE_& local_max)
113 const _TYPE_ x = Kokkos::fabs(tableau_view(i,j));
114 local_max = Kokkos::fmax(local_max, x);
117 Kokkos::Max<_TYPE_, ExecSpace>(Kokkos::subview(max_colonne_view,j)));
119 bool kernelOnDevice = is_default_exec_space<ExecSpace>;
120 if (statistics().get_use_gpu()) end_gpu_timer(__KERNEL_NAME__, kernelOnDevice);
128template <
typename _TYPE_>
131 max_colonne = std::numeric_limits<_TYPE_>::min();
135 local_max_abs_tab_kernel<Kokkos::DefaultExecutionSpace, _TYPE_>(tableau, max_colonne);
137 local_max_abs_tab_kernel<Kokkos::DefaultHostExecutionSpace, _TYPE_>(tableau, max_colonne);
Represents a an array of int/int64/double/... values.
_SIZE_ size_array() const
: Tableau a n entrees pour n<= 4.
_SIZE_ size_totale() const
virtual const MD_Vector & get_md_vector() const