7#ifndef KERNEL_LAFEM_ARCH_UNIT_FILTER_BLOCKED_HPP
8#define KERNEL_LAFEM_ARCH_UNIT_FILTER_BLOCKED_HPP 1
12#include <kernel/backend.hpp>
21 struct UnitFilterBlocked
23 template <
typename DT_,
typename IT_>
24 static void filter_rhs(DT_ * v,
int block_size,
const DT_ *
const sv_elements,
const IT_ *
const sv_indices,
const Index ue,
bool ign_nans)
26 filter_rhs_generic(v, block_size, sv_elements, sv_indices, ue, ign_nans);
29 template <
typename IT_>
30 static void filter_rhs(
double * v,
int block_size,
const double *
const sv_elements,
const IT_ *
const sv_indices,
const Index ue,
bool ign_nans)
32 BACKEND_SKELETON_VOID(filter_rhs_cuda, filter_rhs_generic, filter_rhs_generic, v, block_size, sv_elements, sv_indices, ue, ign_nans)
35 template <
typename IT_>
36 static void filter_rhs(
float * v,
int block_size,
const float *
const sv_elements,
const IT_ *
const sv_indices,
const Index ue,
bool ign_nans)
38 BACKEND_SKELETON_VOID(filter_rhs_cuda, filter_rhs_generic, filter_rhs_generic, v, block_size, sv_elements, sv_indices, ue, ign_nans)
41 template <
typename DT_,
typename IT_>
42 static void filter_def(DT_ * v,
int block_size,
const DT_ *
const sv_elements,
const IT_ *
const sv_indices,
const Index ue,
bool ign_nans)
44 filter_def_generic(v, block_size, sv_elements, sv_indices, ue, ign_nans);
47 template <
typename IT_>
48 static void filter_def(
double * v,
int block_size,
const double *
const sv_elements,
const IT_ *
const sv_indices,
const Index ue,
bool ign_nans)
50 BACKEND_SKELETON_VOID(filter_def_cuda, filter_def_generic, filter_def_generic, v, block_size, sv_elements, sv_indices, ue, ign_nans)
53 template <
typename IT_>
54 static void filter_def(
float * v,
int block_size,
const float *
const sv_elements,
const IT_ *
const sv_indices,
const Index ue,
bool ign_nans)
56 BACKEND_SKELETON_VOID(filter_def_cuda, filter_def_generic, filter_def_generic, v, block_size, sv_elements, sv_indices, ue, ign_nans)
59 template<
typename DT_,
typename IT_>
60 static void filter_unit_mat(DT_* mat,
const IT_*
const row_ptr,
const IT_*
const col_idx,
int block_height,
int block_width,
const DT_ *
const sv_elements,
const IT_ *
const sv_indices,
const Index ue,
bool ign_nans)
62 filter_unit_mat_generic(mat, row_ptr, col_idx, block_height, block_width, sv_elements, sv_indices, ue, ign_nans);
65 template<
typename IT_>
66 static void filter_unit_mat(
double* mat,
const IT_*
const row_ptr,
const IT_*
const col_idx,
int block_height,
int block_width,
const double *
const sv_elements,
const IT_ *
const sv_indices,
const Index ue,
bool ign_nans)
68 BACKEND_SKELETON_VOID(filter_unit_mat_cuda, filter_unit_mat_generic, filter_unit_mat_generic, mat, row_ptr, col_idx, block_height, block_width, sv_elements, sv_indices, ue, ign_nans)
71 template<
typename IT_>
72 static void filter_unit_mat(
float* mat,
const IT_*
const row_ptr,
const IT_*
const col_idx,
int block_height,
int block_width,
const float *
const sv_elements,
const IT_ *
const sv_indices,
const Index ue,
bool ign_nans)
74 BACKEND_SKELETON_VOID(filter_unit_mat_cuda, filter_unit_mat_generic, filter_unit_mat_generic, mat, row_ptr, col_idx, block_height, block_width, sv_elements, sv_indices, ue, ign_nans)
77 template<
typename DT_,
typename IT_>
78 static void filter_offdiag_row_mat(DT_* mat,
const IT_*
const row_ptr,
int block_height,
int block_width,
const DT_ *
const sv_elements,
const IT_ *
const sv_indices,
const Index ue,
bool ign_nans)
80 filter_offdiag_row_mat_generic(mat, row_ptr, block_height, block_width, sv_elements, sv_indices, ue, ign_nans);
83 template<
typename IT_>
84 static void filter_offdiag_row_mat(
double* mat,
const IT_*
const row_ptr,
int block_height,
int block_width,
const double *
const sv_elements,
const IT_ *
const sv_indices,
const Index ue,
bool ign_nans)
86 BACKEND_SKELETON_VOID(filter_offdiag_row_mat_cuda, filter_offdiag_row_mat_generic, filter_offdiag_row_mat_generic, mat, row_ptr, block_height, block_width, sv_elements, sv_indices, ue, ign_nans)
89 template<
typename IT_>
90 static void filter_offdiag_row_mat(
float* mat,
const IT_*
const row_ptr,
int block_height,
int block_width,
const float *
const sv_elements,
const IT_ *
const sv_indices,
const Index ue,
bool ign_nans)
92 BACKEND_SKELETON_VOID(filter_offdiag_row_mat_cuda, filter_offdiag_row_mat_generic, filter_offdiag_row_mat_generic, mat, row_ptr, block_height, block_width, sv_elements, sv_indices, ue, ign_nans)
95 template<
typename DT_,
typename IT_>
96 static void filter_weak_matrix_rows(DT_* mat_a,
const DT_*
const mat_m,
const IT_*
const row_ptr,
int block_height,
int block_width,
const DT_ *
const sv_elements,
const IT_ *
const sv_indices,
const Index ue)
98 filter_weak_matrix_rows_generic(mat_a, mat_m, row_ptr, block_height, block_width, sv_elements, sv_indices, ue);
101 template<
typename IT_>
102 static void filter_weak_matrix_rows(
double* mat_a,
const double*
const mat_m,
const IT_*
const row_ptr,
int block_height,
int block_width,
const double *
const sv_elements,
const IT_ *
const sv_indices,
const Index ue)
104 BACKEND_SKELETON_VOID(filter_weak_matrix_rows_cuda, filter_weak_matrix_rows_generic, filter_weak_matrix_rows_generic, mat_a, mat_m, row_ptr, block_height, block_width, sv_elements, sv_indices, ue)
107 template<
typename IT_>
108 static void filter_weak_matrix_rows(
float* mat_a,
const float*
const mat_m,
const IT_*
const row_ptr,
int block_height,
int block_width,
const float *
const sv_elements,
const IT_ *
const sv_indices,
const Index ue)
110 BACKEND_SKELETON_VOID(filter_weak_matrix_rows_cuda, filter_weak_matrix_rows_generic, filter_weak_matrix_rows_generic, mat_a, mat_m, row_ptr, block_height, block_width, sv_elements, sv_indices, ue)
113 template <
typename DT_,
typename IT_>
114 static void filter_rhs_generic(DT_ * v,
int block_size,
const DT_ *
const sv_elements,
const IT_ *
const sv_indices,
const Index ue,
bool ign_nans);
116 template <
typename DT_,
typename IT_>
117 static void filter_def_generic(DT_ * v,
int block_size,
const DT_ *
const sv_elements,
const IT_ *
const sv_indices,
const Index ue,
bool ign_nans);
119 template <
typename DT_,
typename IT_>
120 static void filter_rhs_cuda(DT_ * v,
int block_size,
const DT_ *
const sv_elements,
const IT_ *
const sv_indices,
const Index ue,
bool ign_nans);
122 template <
typename DT_,
typename IT_>
123 static void filter_def_cuda(DT_ * v,
int block_size,
const DT_ *
const sv_elements,
const IT_ *
const sv_indices,
const Index ue,
bool ign_nans);
125 template<
typename DT_,
typename IT_>
126 static void filter_unit_mat_generic(DT_* mat,
const IT_*
const row_ptr,
const IT_*
const col_idx,
int block_height,
int block_width,
const DT_ *
const sv_elements,
const IT_ *
const sv_indices,
const Index ue,
bool ign_nans);
128 template<
typename DT_,
typename IT_>
129 static void filter_unit_mat_cuda(DT_* mat,
const IT_*
const row_ptr,
const IT_*
const col_idx,
int block_height,
int block_width,
const DT_ *
const sv_elements,
const IT_ *
const sv_indices,
const Index ue,
bool ign_nans);
131 template<
typename DT_,
typename IT_>
132 static void filter_offdiag_row_mat_generic(DT_* mat,
const IT_*
const row_ptr,
int block_height,
int block_width,
const DT_ *
const sv_elements,
const IT_ *
const sv_indices,
const Index ue,
bool ign_nans);
134 template<
typename DT_,
typename IT_>
135 static void filter_offdiag_row_mat_cuda(DT_* mat,
const IT_*
const row_ptr,
int block_height,
int block_width,
const DT_ *
const sv_elements,
const IT_ *
const sv_indices,
const Index ue,
bool ign_nans);
137 template<
typename DT_,
typename IT_>
138 static void filter_weak_matrix_rows_generic(DT_* mat_a,
const DT_*
const mat_m,
const IT_*
const row_ptr,
int block_height,
int block_width,
const DT_ *
const sv_elements,
const IT_ *
const sv_indices,
const Index ue);
140 template<
typename DT_,
typename IT_>
141 static void filter_weak_matrix_rows_cuda(DT_* mat_a,
const DT_*
const mat_m,
const IT_*
const row_ptr,
int block_height,
int block_width,
const DT_ *
const sv_elements,
const IT_ *
const sv_indices,
const Index ue);
147 extern template void UnitFilterBlocked::filter_rhs_generic<float, std::uint64_t>(
float * v,
int block_size,
const float *
const sv_elements,
const std::uint64_t *
const sv_indices,
const Index ue,
bool ign_nans);
148 extern template void UnitFilterBlocked::filter_rhs_generic<double, std::uint64_t>(
double * v,
int block_size,
const double *
const sv_elements,
const std::uint64_t *
const sv_indices,
const Index ue,
bool ign_nans);
149 extern template void UnitFilterBlocked::filter_rhs_generic<float, std::uint32_t>(
float * v,
int block_size,
const float *
const sv_elements,
const std::uint32_t *
const sv_indices,
const Index ue,
bool ign_nans);
150 extern template void UnitFilterBlocked::filter_rhs_generic<double, std::uint32_t>(
double * v,
int block_size,
const double *
const sv_elements,
const std::uint32_t *
const sv_indices,
const Index ue,
bool ign_nans);
152 extern template void UnitFilterBlocked::filter_def_generic<float, std::uint64_t>(
float * v,
int block_size,
const float *
const sv_elements,
const std::uint64_t *
const sv_indices,
const Index ue,
bool ign_nans);
153 extern template void UnitFilterBlocked::filter_def_generic<double, std::uint64_t>(
double * v,
int block_size,
const double *
const sv_elements,
const std::uint64_t *
const sv_indices,
const Index ue,
bool ign_nans);
154 extern template void UnitFilterBlocked::filter_def_generic<float, std::uint32_t>(
float * v,
int block_size,
const float *
const sv_elements,
const std::uint32_t *
const sv_indices,
const Index ue,
bool ign_nans);
155 extern template void UnitFilterBlocked::filter_def_generic<double, std::uint32_t>(
double * v,
int block_size,
const double *
const sv_elements,
const std::uint32_t *
const sv_indices,
const Index ue,
bool ign_nans);
157 extern template void UnitFilterBlocked::filter_unit_mat_generic<float, std::uint64_t>(
float* mat,
const std::uint64_t*
const row_ptr,
const std::uint64_t*
const col_idx,
int block_height,
int block_width,
const float *
const sv_elements,
const std::uint64_t *
const sv_indices,
const Index ue,
bool ign_nans);
158 extern template void UnitFilterBlocked::filter_unit_mat_generic<double, std::uint64_t>(
double* mat,
const std::uint64_t*
const row_ptr,
const std::uint64_t*
const col_idx,
int block_height,
int block_width,
const double *
const sv_elements,
const std::uint64_t *
const sv_indices,
const Index ue,
bool ign_nans);
159 extern template void UnitFilterBlocked::filter_unit_mat_generic<float, std::uint32_t>(
float* mat,
const std::uint32_t*
const row_ptr,
const std::uint32_t*
const col_idx,
int block_height,
int block_width,
const float *
const sv_elements,
const std::uint32_t *
const sv_indices,
const Index ue,
bool ign_nans);
160 extern template void UnitFilterBlocked::filter_unit_mat_generic<double, std::uint32_t>(
double* mat,
const std::uint32_t*
const row_ptr,
const std::uint32_t*
const col_idx,
int block_height,
int block_width,
const double *
const sv_elements,
const std::uint32_t *
const sv_indices,
const Index ue,
bool ign_nans);
162 extern template void UnitFilterBlocked::filter_offdiag_row_mat_generic<float, std::uint64_t>(
float* mat,
const std::uint64_t*
const row_ptr,
int block_height,
int block_width,
const float *
const sv_elements,
const std::uint64_t *
const sv_indices,
const Index ue,
bool ign_nans);
163 extern template void UnitFilterBlocked::filter_offdiag_row_mat_generic<double, std::uint64_t>(
double* mat,
const std::uint64_t*
const row_ptr,
int block_height,
int block_width,
const double *
const sv_elements,
const std::uint64_t *
const sv_indices,
const Index ue,
bool ign_nans);
164 extern template void UnitFilterBlocked::filter_offdiag_row_mat_generic<float, std::uint32_t>(
float* mat,
const std::uint32_t*
const row_ptr,
int block_height,
int block_width,
const float *
const sv_elements,
const std::uint32_t *
const sv_indices,
const Index ue,
bool ign_nans);
165 extern template void UnitFilterBlocked::filter_offdiag_row_mat_generic<double, std::uint32_t>(
double* mat,
const std::uint32_t*
const row_ptr,
int block_height,
int block_width,
const double *
const sv_elements,
const std::uint32_t *
const sv_indices,
const Index ue,
bool ign_nans);
167 extern template void UnitFilterBlocked::filter_weak_matrix_rows_generic<float, std::uint64_t>(
float* mat_a,
const float*
const mat_m,
const std::uint64_t*
const row_ptr,
int block_height,
int block_width,
const float *
const sv_elements,
const std::uint64_t *
const sv_indices,
const Index ue);
168 extern template void UnitFilterBlocked::filter_weak_matrix_rows_generic<double, std::uint64_t>(
double* mat_a,
const double*
const mat_m,
const std::uint64_t*
const row_ptr,
int block_height,
int block_width,
const double *
const sv_elements,
const std::uint64_t *
const sv_indices,
const Index ue);
169 extern template void UnitFilterBlocked::filter_weak_matrix_rows_generic<float, std::uint32_t>(
float* mat_a,
const float*
const mat_m,
const std::uint32_t*
const row_ptr,
int block_height,
int block_width,
const float *
const sv_elements,
const std::uint32_t *
const sv_indices,
const Index ue);
170 extern template void UnitFilterBlocked::filter_weak_matrix_rows_generic<double, std::uint32_t>(
double* mat_a,
const double*
const mat_m,
const std::uint32_t*
const row_ptr,
int block_height,
int block_width,
const double *
const sv_elements,
const std::uint32_t *
const sv_indices,
const Index ue);
179#include <kernel/lafem/arch/unit_filter_blocked_generic.hpp>
std::uint64_t Index
Index data type.