16#ifndef dealii_vector_operations_internal_h
17#define dealii_vector_operations_internal_h
33#ifdef DEAL_II_WITH_TBB
34# include <tbb/blocked_range.h>
35# include <tbb/partitioner.h>
43 namespace VectorOperations
69 template <
typename T,
typename U>
73 std::copy(begin, end,
dest);
76 template <
typename T,
typename U>
78 copy(
const std::complex<T> *begin,
79 const std::complex<T> *end,
80 std::complex<U> *
dest)
82 std::copy(begin, end,
dest);
85 template <
typename T,
typename U>
87 copy(
const std::complex<T> *,
const std::complex<T> *, U *)
90 ExcMessage(
"Can't convert a vector of complex numbers "
91 "into a vector of reals/doubles"));
96#ifdef DEAL_II_WITH_TBB
105 template <
typename Functor>
117 const unsigned int gs =
151 template <
typename Functor>
157 const std::shared_ptr<::parallel::internal::TBBPartitioner>
160#ifdef DEAL_II_WITH_TBB
168 Assert(partitioner.get() !=
nullptr,
170 "Unexpected initialization of Vector that does "
171 "not set the TBB partitioner to a usable state."));
173 partitioner->acquire_one_partitioner();
203 template <
typename Number>
218 if (
value == Number())
219 std::fill(
dst + begin,
dst + end, Number());
228 template <
typename Number,
typename OtherNumber>
244 if constexpr (std::is_trivially_copyable<Number>() &&
245 std::is_same_v<Number, OtherNumber>)
246 std::memcpy(
dst + begin,
src + begin, (end - begin) *
sizeof(Number));
259 template <
typename Number>
291 template <
typename Number>
295 const Number *
const v_val,
326 template <
typename Number>
330 const Number *
const v_val,
365 template <
typename Number>
393 template <
typename Number>
423 template <
typename Number>
451 template <
typename Number>
455 const Number *
const v_val,
456 const Number *
const w_val,
491 template <
typename Number>
495 const Number *
const v_val,
525 template <
typename Number>
568 template <
typename Number>
596 template <
typename Number>
600 const Number *
const u_val,
630 template <
typename Number>
634 const Number *
const u_val,
635 const Number *
const v_val,
670 template <
typename Number>
716 template <
typename Number>
753 template <
typename Number,
typename Number2>
756 static constexpr bool vectorizes = std::is_same_v<Number, Number2> &&
759 Dot(
const Number *
const X,
const Number2 *
const Y)
785 "This operation is not correctly implemented for "
786 "complex-valued objects.");
790 const Number *
const X;
791 const Number2 *
const Y;
794 template <
typename Number,
typename RealType>
817 const Number *
const X;
820 template <
typename Number,
typename RealType>
846 template <
typename Number,
typename RealType>
874 template <
typename Number>
900 template <
typename Number>
906 const Number *
const V,
907 const Number *
const W,
942 "This operation is not correctly implemented for "
943 "complex-valued objects.");
948 const Number *
const V;
949 const Number *
const W;
997 template <
typename Operation,
typename ResultType>
1029 std::bool_constant<Operation::vectorizes>());
1038 for (;
j + 2 * n_lanes - 1 < n_chunks;
1039 j += 2 * n_lanes, n_chunks += n_lanes)
1050 if (Operation::vectorizes)
1057 for (
unsigned int i = 0; i < 8; ++i)
1060 for (
unsigned int i = 0; i < 4; ++i)
1063 for (
unsigned int i = 0; i < 2; ++i)
1072 for (;
j + 1 < n_chunks;
j += 2, ++n_chunks)
1111 template <
typename Operation,
typename ResultType>
1117 std::bool_constant<false>)
1125 for (
size_type i = 0; i < n_chunks; ++i)
1128 for (
unsigned int k = 0;
k < 2; ++
k)
1131 ResultType
r1 = op(
index + 1);
1132 ResultType
r2 = op(
index + 2);
1133 ResultType
r3 = op(
index + 3);
1152 ResultType
r0 = ResultType(),
r1 = ResultType(),
r2 = ResultType();
1193 template <
typename Operation,
typename Number>
1199 std::bool_constant<true>)
1215 for (
unsigned int k = 0;
k < 2; ++
k)
1220 op.do_vectorized(
index + 2 * n_lanes);
1222 op.do_vectorized(
index + 3 * n_lanes);
1223 index += n_lanes * 4;
1226 r0 += op.do_vectorized(
index);
1227 r1 += op.do_vectorized(
index + n_lanes);
1228 r2 += op.do_vectorized(
index + 2 * n_lanes);
1229 r3 += op.do_vectorized(
index + 3 * n_lanes);
1242 static_assert(n_lanes <= 16 && 16 % n_lanes == 0,
1243 "VectorizedArray::size() must be 1, 2, 4, 8, or 16");
1254 r0 += op.do_vectorized(
index);
1255 r1 += op.do_vectorized(
index + n_lanes);
1261 if (last >= n_lanes)
1263 r0 += op.do_vectorized(
index);
1267 for (
unsigned int i = 0; i < last; ++i)
1277 n_chunks += n_lanes;
1288#ifdef DEAL_II_WITH_TBB
1317 template <
typename Operation,
typename ResultType>
1331 const unsigned int gs =
1407 template <
typename Operation,
typename ResultType>
1417 const std::shared_ptr<::parallel::internal::TBBPartitioner>
1420#ifdef DEAL_II_WITH_TBB
1428 Assert(partitioner.get() !=
nullptr,
1430 "Unexpected initialization of Vector that does "
1431 "not set the TBB partitioner to a usable state."));
1433 partitioner->acquire_one_partitioner();
1463 template <
typename Number,
typename Number2,
typename MemorySpace>
1468 const std::shared_ptr<::parallel::internal::TBBPartitioner> &
1471 const ::MemorySpace::MemorySpaceData<Number2, MemorySpace>
1476 std::is_same_v<MemorySpace, ::MemorySpace::Default> &&
1477 std::is_same_v<Number, Number2>,
1478 "For the Default MemorySpace Number and Number2 should be the same type");
1483 const std::shared_ptr<::parallel::internal::TBBPartitioner> &
1492 const std::shared_ptr<::parallel::internal::TBBPartitioner> &
1495 const ::MemorySpace::MemorySpaceData<Number, MemorySpace>
1502 const std::shared_ptr<::parallel::internal::TBBPartitioner> &
1505 const ::MemorySpace::MemorySpaceData<Number, MemorySpace>
1512 const std::shared_ptr<::parallel::internal::TBBPartitioner> &
1521 const std::shared_ptr<::parallel::internal::TBBPartitioner> &
1525 const ::MemorySpace::MemorySpaceData<Number, MemorySpace>
1532 const std::shared_ptr<::parallel::internal::TBBPartitioner> &
1537 const ::MemorySpace::MemorySpaceData<Number, MemorySpace>
1539 const ::MemorySpace::MemorySpaceData<Number, MemorySpace>
1546 const std::shared_ptr<::parallel::internal::TBBPartitioner> &
1550 const ::MemorySpace::MemorySpaceData<Number, MemorySpace>
1557 const std::shared_ptr<::parallel::internal::TBBPartitioner> &
1562 const ::MemorySpace::MemorySpaceData<Number, MemorySpace>
1569 const std::shared_ptr<::parallel::internal::TBBPartitioner> &
1575 const ::MemorySpace::MemorySpaceData<Number, MemorySpace>
1577 const ::MemorySpace::MemorySpaceData<Number, MemorySpace>
1584 const std::shared_ptr<::parallel::internal::TBBPartitioner> &
1593 const std::shared_ptr<::parallel::internal::TBBPartitioner> &
1596 const ::MemorySpace::MemorySpaceData<Number, MemorySpace>
1603 const std::shared_ptr<::parallel::internal::TBBPartitioner> &
1607 const ::MemorySpace::MemorySpaceData<Number, MemorySpace>
1614 const std::shared_ptr<::parallel::internal::TBBPartitioner> &
1619 const ::MemorySpace::MemorySpaceData<Number, MemorySpace>
1621 const ::MemorySpace::MemorySpaceData<Number, MemorySpace>
1628 const std::shared_ptr<::parallel::internal::TBBPartitioner> &
1631 const ::MemorySpace::MemorySpaceData<Number2, MemorySpace>
1638 template <
typename real_type>
1641 const std::shared_ptr<::parallel::internal::TBBPartitioner> &
1645 const ::MemorySpace::MemorySpaceData<Number, MemorySpace>
1652 const std::shared_ptr<::parallel::internal::TBBPartitioner> &
1655 const ::MemorySpace::MemorySpaceData<Number, MemorySpace>
1661 template <
typename real_type>
1664 const std::shared_ptr<::parallel::internal::TBBPartitioner> &
1672 template <
typename real_type>
1675 const std::shared_ptr<::parallel::internal::TBBPartitioner> &
1685 const std::shared_ptr<::parallel::internal::TBBPartitioner> &
1689 const ::MemorySpace::MemorySpaceData<Number, MemorySpace>
1691 const ::MemorySpace::MemorySpaceData<Number, MemorySpace>
1698 template <
typename MemorySpace2>
1701 const std::shared_ptr<::parallel::internal::TBBPartitioner> &
1705 const ::MemorySpace::MemorySpaceData<Number, MemorySpace2>
1713 template <
typename Number,
typename Number2>
1717 copy(
const std::shared_ptr<::parallel::internal::TBBPartitioner>
1718 &thread_loop_partitioner,
1720 const ::MemorySpace::
1727 data.values.data());
1732 set(
const std::shared_ptr<::parallel::internal::TBBPartitioner>
1733 &thread_loop_partitioner,
1746 const std::shared_ptr<::parallel::internal::TBBPartitioner>
1747 &thread_loop_partitioner,
1749 const ::MemorySpace::
1762 const std::shared_ptr<::parallel::internal::TBBPartitioner>
1763 &thread_loop_partitioner,
1765 const ::MemorySpace::
1778 const std::shared_ptr<::parallel::internal::TBBPartitioner>
1779 &thread_loop_partitioner,
1791 add_av(
const std::shared_ptr<::parallel::internal::TBBPartitioner>
1792 &thread_loop_partitioner,
1795 const ::MemorySpace::
1809 const std::shared_ptr<::parallel::internal::TBBPartitioner>
1810 &thread_loop_partitioner,
1814 const ::MemorySpace::
1829 const std::shared_ptr<::parallel::internal::TBBPartitioner>
1830 &thread_loop_partitioner,
1833 const ::MemorySpace::
1847 const std::shared_ptr<::parallel::internal::TBBPartitioner>
1848 &thread_loop_partitioner,
1852 const ::MemorySpace::
1867 const std::shared_ptr<::parallel::internal::TBBPartitioner>
1868 &thread_loop_partitioner,
1873 const ::MemorySpace::
1892 const std::shared_ptr<::parallel::internal::TBBPartitioner>
1893 &thread_loop_partitioner,
1895 const Number factor,
1901 data.values.data(), factor);
1906 scale(
const std::shared_ptr<::parallel::internal::TBBPartitioner>
1907 &thread_loop_partitioner,
1909 const ::MemorySpace::
1921 equ_au(
const std::shared_ptr<::parallel::internal::TBBPartitioner>
1922 &thread_loop_partitioner,
1925 const ::MemorySpace::
1939 const std::shared_ptr<::parallel::internal::TBBPartitioner>
1940 &thread_loop_partitioner,
1944 const ::MemorySpace::
1958 dot(
const std::shared_ptr<::parallel::internal::TBBPartitioner>
1959 &thread_loop_partitioner,
1961 const ::MemorySpace::
1971 dot, 0,
size, sum, thread_loop_partitioner);
1977 template <
typename real_type>
1979 norm_2(
const std::shared_ptr<::parallel::internal::TBBPartitioner>
1980 &thread_loop_partitioner,
1993 const std::shared_ptr<::parallel::internal::TBBPartitioner>
1994 &thread_loop_partitioner,
1996 const ::MemorySpace::
2006 template <
typename real_type>
2008 norm_1(
const std::shared_ptr<::parallel::internal::TBBPartitioner>
2009 &thread_loop_partitioner,
2022 thread_loop_partitioner);
2025 template <
typename real_type>
2027 norm_p(
const std::shared_ptr<::parallel::internal::TBBPartitioner>
2028 &thread_loop_partitioner,
2042 const std::shared_ptr<::parallel::internal::TBBPartitioner>
2043 &thread_loop_partitioner,
2046 const ::MemorySpace::
2064 template <
typename MemorySpace2>
2067 const std::shared_ptr<::parallel::internal::TBBPartitioner>
2068 &thread_loop_partitioner,
2071 const ::MemorySpace::MemorySpaceData<Number, MemorySpace2>
2077 std::is_same_v<MemorySpace2, ::MemorySpace::Host>,
2094 template <
typename MemorySpace2>
2097 const std::shared_ptr<::parallel::internal::TBBPartitioner>
2101 const ::MemorySpace::MemorySpaceData<Number, MemorySpace2>
2107 std::is_same_v<MemorySpace2, ::MemorySpace::Default>,
2113 Kokkos::subview(
data.values,
2114 Kokkos::pair<size_type, size_type>(0,
size)),
2116 Kokkos::pair<size_type, size_type>(0,
size)));
2127 template <
typename Number>
2132 const std::shared_ptr<::parallel::internal::TBBPartitioner> &,
2134 const ::MemorySpace::
2141 Kokkos::subview(
data.values,
2142 Kokkos::pair<size_type, size_type>(0,
size)),
2144 Kokkos::pair<size_type, size_type>(0,
size)));
2148 set(
const std::shared_ptr<::parallel::internal::TBBPartitioner> &,
2156 Kokkos::subview(
data.values,
2157 Kokkos::pair<size_type, size_type>(0,
size)),
2163 const std::shared_ptr<::parallel::internal::TBBPartitioner> &,
2165 const ::MemorySpace::
2171 auto exec = typename ::MemorySpace::Default::kokkos_space::
2173 Kokkos::parallel_for(
2175 Kokkos::RangePolicy<
2176 ::MemorySpace::Default::kokkos_space::execution_space>(
2184 const std::shared_ptr<::parallel::internal::TBBPartitioner> &,
2186 const ::MemorySpace::
2192 auto exec = typename ::MemorySpace::Default::kokkos_space::
2194 Kokkos::parallel_for(
2195 "::subtract_vector",
2196 Kokkos::RangePolicy<
2197 ::MemorySpace::Default::kokkos_space::execution_space>(
2205 const std::shared_ptr<::parallel::internal::TBBPartitioner> &,
2212 auto exec = typename ::MemorySpace::Default::kokkos_space::
2214 Kokkos::parallel_for(
2216 Kokkos::RangePolicy<
2217 ::MemorySpace::Default::kokkos_space::execution_space>(
2225 const std::shared_ptr<::parallel::internal::TBBPartitioner> &,
2228 const ::MemorySpace::
2234 auto exec = typename ::MemorySpace::Default::kokkos_space::
2236 Kokkos::parallel_for(
2238 Kokkos::RangePolicy<
2239 ::MemorySpace::Default::kokkos_space::execution_space>(
2249 const std::shared_ptr<::parallel::internal::TBBPartitioner> &,
2253 const ::MemorySpace::
2261 auto exec = typename ::MemorySpace::Default::kokkos_space::
2263 Kokkos::parallel_for(
2265 Kokkos::RangePolicy<
2266 ::MemorySpace::Default::kokkos_space::execution_space>(
2276 const std::shared_ptr<::parallel::internal::TBBPartitioner> &,
2279 const ::MemorySpace::
2285 auto exec = typename ::MemorySpace::Default::kokkos_space::
2287 Kokkos::parallel_for(
2289 Kokkos::RangePolicy<
2290 ::MemorySpace::Default::kokkos_space::execution_space>(
2300 const std::shared_ptr<::parallel::internal::TBBPartitioner> &,
2304 const ::MemorySpace::
2310 auto exec = typename ::MemorySpace::Default::kokkos_space::
2312 Kokkos::parallel_for(
2314 Kokkos::RangePolicy<
2315 ::MemorySpace::Default::kokkos_space::execution_space>(
2325 const std::shared_ptr<::parallel::internal::TBBPartitioner> &,
2330 const ::MemorySpace::
2338 auto exec = typename ::MemorySpace::Default::kokkos_space::
2340 Kokkos::parallel_for(
2342 Kokkos::RangePolicy<
2343 ::MemorySpace::Default::kokkos_space::execution_space>(
2354 const std::shared_ptr<::parallel::internal::TBBPartitioner> &,
2356 const Number factor,
2361 auto exec = typename ::MemorySpace::Default::kokkos_space::
2363 Kokkos::parallel_for(
2364 "::multiply_factor",
2365 Kokkos::RangePolicy<
2366 ::MemorySpace::Default::kokkos_space::execution_space>(
2374 const std::shared_ptr<::parallel::internal::TBBPartitioner> &,
2376 const ::MemorySpace::
2382 auto exec = typename ::MemorySpace::Default::kokkos_space::
2384 Kokkos::parallel_for(
2386 Kokkos::RangePolicy<
2387 ::MemorySpace::Default::kokkos_space::execution_space>(
2395 const std::shared_ptr<::parallel::internal::TBBPartitioner> &,
2398 const ::MemorySpace::
2404 auto exec = typename ::MemorySpace::Default::kokkos_space::
2406 Kokkos::parallel_for(
2408 Kokkos::RangePolicy<
2409 ::MemorySpace::Default::kokkos_space::execution_space>(
2419 const std::shared_ptr<::parallel::internal::TBBPartitioner> &,
2423 const ::MemorySpace::
2431 auto exec = typename ::MemorySpace::Default::kokkos_space::
2433 Kokkos::parallel_for(
2435 Kokkos::RangePolicy<
2436 ::MemorySpace::Default::kokkos_space::execution_space>(
2445 dot(
const std::shared_ptr<::parallel::internal::TBBPartitioner> &,
2447 const ::MemorySpace::
2455 auto exec = typename ::MemorySpace::Default::kokkos_space::
2457 Kokkos::parallel_reduce(
2459 Kokkos::RangePolicy<
2460 ::MemorySpace::Default::kokkos_space::execution_space>(
2471 template <
typename real_type>
2473 norm_2(
const std::shared_ptr<::parallel::internal::TBBPartitioner>
2474 &thread_loop_partitioner,
2485 const std::shared_ptr<::parallel::internal::TBBPartitioner> &,
2487 const ::MemorySpace::
2492 auto exec = typename ::MemorySpace::Default::kokkos_space::
2494 Kokkos::parallel_reduce(
2496 Kokkos::RangePolicy<
2497 ::MemorySpace::Default::kokkos_space::execution_space>(
2508 template <
typename real_type>
2511 const std::shared_ptr<::parallel::internal::TBBPartitioner> &,
2519 auto exec = typename ::MemorySpace::Default::kokkos_space::
2521 Kokkos::parallel_reduce(
2523 Kokkos::RangePolicy<
2524 ::MemorySpace::Default::kokkos_space::execution_space>(
2527#if KOKKOS_VERSION < 30400
2529#elif KOKKOS_VERSION < 30700
2530 update += Kokkos::Experimental::fabs(
data.values(i));
2538 template <
typename real_type>
2541 const std::shared_ptr<::parallel::internal::TBBPartitioner> &,
2549 auto exec = typename ::MemorySpace::Default::kokkos_space::
2551 Kokkos::parallel_reduce(
2553 Kokkos::RangePolicy<
2554 ::MemorySpace::Default::kokkos_space::execution_space>(
2557#if KOKKOS_VERSION < 30400
2559#elif KOKKOS_VERSION < 30700
2560 update += Kokkos::Experimental::pow(
2561 Kokkos::Experimental::fabs(
data.values(i)), exp);
2563 update += Kokkos::pow(Kokkos::abs(
data.values(i)), exp);
2571 const std::shared_ptr<::parallel::internal::TBBPartitioner> &,
2574 const ::MemorySpace::
2584 auto exec = typename ::MemorySpace::Default::kokkos_space::
2586 Kokkos::parallel_reduce(
2588 Kokkos::RangePolicy<
2589 ::MemorySpace::Default::kokkos_space::execution_space>(
2602 template <
typename MemorySpace2>
2605 const std::shared_ptr<::parallel::internal::TBBPartitioner>
2606 &thread_loop_partitioner,
2609 const ::MemorySpace::MemorySpaceData<Number, MemorySpace2>
2615 std::is_same_v<MemorySpace2, ::MemorySpace::Default>,
2632 template <
typename MemorySpace2>
2635 const std::shared_ptr<::parallel::internal::TBBPartitioner>
2639 const ::MemorySpace::MemorySpaceData<Number, MemorySpace2>
2645 std::is_same_v<MemorySpace2, ::MemorySpace::Host>,
2651 Kokkos::subview(
data.values,
2652 Kokkos::pair<size_type, size_type>(0,
size)),
2654 Kokkos::pair<size_type, size_type>(0,
size)));
static unsigned int n_threads()
std::conditional_t< rank_==1, std::array< Number, dim >, std::array< Tensor< rank_ - 1, dim, Number >, dim > > values
static constexpr std::size_t size()
#define DEAL_II_ALWAYS_INLINE
#define DEAL_II_OPENMP_SIMD_PRAGMA
#define DEAL_II_NAMESPACE_OPEN
#define DEAL_II_NAMESPACE_CLOSE
#define DEAL_II_FALLTHROUGH
static ::ExceptionBase & ExcNotImplemented()
#define Assert(cond, exc)
#define AssertIsFinite(number)
#define AssertDimension(dim1, dim2)
#define AssertIndexRange(index, range)
static ::ExceptionBase & ExcInternalError()
static ::ExceptionBase & ExcMessage(std::string arg1)
#define AssertThrow(cond, exc)
std::vector< index_type > data
unsigned int minimum_parallel_grain_size
void accumulate_recursive(const Operation &op, const size_type first, const size_type last, ResultType &result)
bool is_non_negative(const T &t)
size_type do_accumulate(const Operation op, const size_type vec_size, const size_type start_index, ResultType *outer_results, std::bool_constant< false >)
void parallel_reduce(const Operation &op, const size_type start, const size_type end, ResultType &result, const std::shared_ptr<::parallel::internal::TBBPartitioner > &partitioner)
void copy(const T *begin, const T *end, U *dest)
void parallel_for(Functor &functor, const size_type start, const size_type end, const std::shared_ptr<::parallel::internal::TBBPartitioner > &partitioner)
const unsigned int vector_accumulation_recursion_threshold
types::global_dof_index size_type
void parallel_for(Iterator x_begin, Iterator x_end, const Functor &functor, const unsigned int grainsize)
::VectorizedArray< Number, width > min(const ::VectorizedArray< Number, width > &, const ::VectorizedArray< Number, width > &)
::VectorizedArray< Number, width > pow(const ::VectorizedArray< Number, width > &, const Number p)
::VectorizedArray< Number, width > abs(const ::VectorizedArray< Number, width > &)
unsigned int global_dof_index
static const bool vectorizes
AddAndDot(Number *const X, const Number *const V, const Number *const W, const Number a)
Number operator()(const size_type i) const
VectorizedArray< Number > do_vectorized(const size_type i) const
Dot(const Number *const X, const Number2 *const Y)
static constexpr bool vectorizes
Number operator()(const size_type i) const
VectorizedArray< Number > do_vectorized(const size_type i) const
Number operator()(const size_type i) const
VectorizedArray< Number > do_vectorized(const size_type i) const
MeanValue(const Number *X)
static const bool vectorizes
RealType operator()(const size_type i) const
static const bool vectorizes
VectorizedArray< Number > do_vectorized(const size_type i) const
Norm2(const Number *const X)
RealType operator()(const size_type i) const
static const bool vectorizes
VectorizedArray< Number > do_vectorized(const size_type i) const
RealType operator()(const size_type i) const
NormP(const Number *X, RealType p)
VectorizedArray< Number > do_vectorized(const size_type i) const
static const bool vectorizes
void operator()(const tbb::blocked_range< size_type > &range) const
TBBForFunctor(Functor &functor, const size_type start, const size_type end)
static const unsigned int threshold_array_allocate
TBBReduceFunctor(const Operation &op, const size_type start, const size_type end)
ResultType small_array[threshold_array_allocate]
ResultType do_sum() const
void operator()(const tbb::blocked_range< size_type > &range) const
std::vector< ResultType > large_array
Vector_copy(const OtherNumber *const src, Number *const dst)
void operator()(const size_type begin, const size_type end) const
const OtherNumber *const src
Vector_set(const Number value, Number *const dst)
void operator()(const size_type begin, const size_type end) const
Vectorization_add_av(Number *const val, const Number *const v_val, const Number factor)
void operator()(const size_type begin, const size_type end) const
const Number *const v_val
const Number stored_factor
Vectorization_add_avpbw(Number *const val, const Number *const v_val, const Number *const w_val, const Number a, const Number b)
void operator()(const size_type begin, const size_type end) const
const Number *const w_val
const Number *const v_val
void operator()(const size_type begin, const size_type end) const
const Number stored_factor
Vectorization_add_factor(Number *const val, const Number factor)
void operator()(const size_type begin, const size_type end) const
const Number *const v_val
Vectorization_add_v(Number *const val, const Number *const v_val)
const Number *const u_val
Vectorization_equ_au(Number *const val, const Number *const u_val, const Number a)
void operator()(const size_type begin, const size_type end) const
Vectorization_equ_aubv(Number *const val, const Number *const u_val, const Number *const v_val, const Number a, const Number b)
const Number *const u_val
void operator()(const size_type begin, const size_type end) const
const Number *const v_val
Vectorization_equ_aubvcw(Number *val, const Number *u_val, const Number *v_val, const Number *w_val, const Number a, const Number b, const Number c)
const Number *const w_val
const Number *const v_val
const Number *const u_val
void operator()(const size_type begin, const size_type end) const
Vectorization_multiply_factor(Number *const val, const Number factor)
const Number stored_factor
void operator()(const size_type begin, const size_type end) const
void operator()(const size_type begin, const size_type end) const
const Number *const a_val
Vectorization_ratio(Number *val, const Number *a_val, const Number *b_val)
const Number *const b_val
Vectorization_sadd_xav(Number *val, const Number *const v_val, const Number a, const Number x)
const Number *const v_val
void operator()(const size_type begin, const size_type end) const
const Number *const v_val
const Number *const w_val
void operator()(const size_type begin, const size_type end) const
Vectorization_sadd_xavbw(Number *val, const Number *v_val, const Number *w_val, Number x, Number a, Number b)
Vectorization_sadd_xv(Number *const val, const Number *const v_val, const Number x)
void operator()(const size_type begin, const size_type end) const
const Number *const v_val
const Number *const v_val
void operator()(const size_type begin, const size_type end) const
Vectorization_scale(Number *const val, const Number *const v_val)
Vectorization_subtract_v(Number *val, const Number *const v_val)
void operator()(const size_type begin, const size_type end) const
const Number *const v_val
static void set(const std::shared_ptr<::parallel::internal::TBBPartitioner > &thread_loop_partitioner, const size_type size, const Number s, ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Host > &data)
static void norm_2(const std::shared_ptr<::parallel::internal::TBBPartitioner > &thread_loop_partitioner, const size_type size, real_type &sum, ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Host > &data)
static void norm_p(const std::shared_ptr<::parallel::internal::TBBPartitioner > &thread_loop_partitioner, const size_type size, real_type &sum, const real_type p, ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Host > &data)
static void import_elements(const std::shared_ptr<::parallel::internal::TBBPartitioner > &, const size_type size, VectorOperation::values operation, const ::MemorySpace::MemorySpaceData< Number, MemorySpace2 > &v_data, ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Host > &data, std::enable_if_t< std::is_same_v< MemorySpace2, ::MemorySpace::Default >, int >=0)
static void add_avpbw(const std::shared_ptr<::parallel::internal::TBBPartitioner > &thread_loop_partitioner, const size_type size, const Number a, const Number b, const ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Host > &v_data, const ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Host > &w_data, ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Host > &data)
static void sadd_xav(const std::shared_ptr<::parallel::internal::TBBPartitioner > &thread_loop_partitioner, const size_type size, const Number x, const Number a, const ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Host > &v_data, ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Host > &data)
static void equ_au(const std::shared_ptr<::parallel::internal::TBBPartitioner > &thread_loop_partitioner, const size_type size, const Number a, const ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Host > &v_data, ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Host > &data)
static void scale(const std::shared_ptr<::parallel::internal::TBBPartitioner > &thread_loop_partitioner, const size_type size, const ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Host > &v_data, ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Host > &data)
static Number mean_value(const std::shared_ptr<::parallel::internal::TBBPartitioner > &thread_loop_partitioner, const size_type size, const ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Host > &data)
static void add_factor(const std::shared_ptr<::parallel::internal::TBBPartitioner > &thread_loop_partitioner, const size_type size, Number a, ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Host > &data)
static void sadd_xv(const std::shared_ptr<::parallel::internal::TBBPartitioner > &thread_loop_partitioner, const size_type size, const Number x, const ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Host > &v_data, ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Host > &data)
static void copy(const std::shared_ptr<::parallel::internal::TBBPartitioner > &thread_loop_partitioner, const size_type size, const ::MemorySpace::MemorySpaceData< Number2, ::MemorySpace::Host > &v_data, ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Host > &data)
static void import_elements(const std::shared_ptr<::parallel::internal::TBBPartitioner > &thread_loop_partitioner, const size_type size, VectorOperation::values operation, const ::MemorySpace::MemorySpaceData< Number, MemorySpace2 > &v_data, ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Host > &data, std::enable_if_t< std::is_same_v< MemorySpace2, ::MemorySpace::Host >, int >=0)
static void add_av(const std::shared_ptr<::parallel::internal::TBBPartitioner > &thread_loop_partitioner, const size_type size, const Number a, const ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Host > &v_data, ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Host > &data)
static void add_vector(const std::shared_ptr<::parallel::internal::TBBPartitioner > &thread_loop_partitioner, const size_type size, const ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Host > &v_data, ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Host > &data)
static void sadd_xavbw(const std::shared_ptr<::parallel::internal::TBBPartitioner > &thread_loop_partitioner, const size_type size, const Number x, const Number a, const Number b, const ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Host > &v_data, const ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Host > &w_data, ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Host > &data)
static void subtract_vector(const std::shared_ptr<::parallel::internal::TBBPartitioner > &thread_loop_partitioner, const size_type size, const ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Host > &v_data, ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Host > &data)
static Number add_and_dot(const std::shared_ptr<::parallel::internal::TBBPartitioner > &thread_loop_partitioner, const size_type size, const Number a, const ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Host > &v_data, const ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Host > &w_data, ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Host > &data)
static Number dot(const std::shared_ptr<::parallel::internal::TBBPartitioner > &thread_loop_partitioner, const size_type size, const ::MemorySpace::MemorySpaceData< Number2, ::MemorySpace::Host > &v_data, ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Host > &data)
static void equ_aubv(const std::shared_ptr<::parallel::internal::TBBPartitioner > &thread_loop_partitioner, const size_type size, const Number a, const Number b, const ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Host > &v_data, const ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Host > &w_data, ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Host > &data)
static void norm_1(const std::shared_ptr<::parallel::internal::TBBPartitioner > &thread_loop_partitioner, const size_type size, real_type &sum, ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Host > &data, const size_type optional_offset=0)
static void multiply_factor(const std::shared_ptr<::parallel::internal::TBBPartitioner > &thread_loop_partitioner, const size_type size, const Number factor, ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Host > &data)
static void subtract_vector(const std::shared_ptr<::parallel::internal::TBBPartitioner > &, const size_type size, const ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Default > &v_data, ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Default > &data)
static void sadd_xav(const std::shared_ptr<::parallel::internal::TBBPartitioner > &, const size_type size, const Number x, const Number a, const ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Default > &v_data, ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Default > &data)
static Number dot(const std::shared_ptr<::parallel::internal::TBBPartitioner > &, const size_type size, const ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Default > &v_data, ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Default > &data)
static void add_av(const std::shared_ptr<::parallel::internal::TBBPartitioner > &, const size_type size, const Number a, const ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Default > &v_data, ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Default > &data)
static void copy(const std::shared_ptr<::parallel::internal::TBBPartitioner > &, const size_type size, const ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Default > &v_data, ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Default > &data)
static Number add_and_dot(const std::shared_ptr<::parallel::internal::TBBPartitioner > &, const size_type size, const Number a, const ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Default > &v_data, const ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Default > &w_data, ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Default > &data)
static void sadd_xavbw(const std::shared_ptr<::parallel::internal::TBBPartitioner > &, const size_type size, const Number x, const Number a, const Number b, const ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Default > &v_data, const ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Default > &w_data, ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Default > &data)
static Number mean_value(const std::shared_ptr<::parallel::internal::TBBPartitioner > &, const size_type size, const ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Default > &data)
static void norm_p(const std::shared_ptr<::parallel::internal::TBBPartitioner > &, const size_type size, real_type &sum, real_type exp, ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Default > &data)
static void add_factor(const std::shared_ptr<::parallel::internal::TBBPartitioner > &, const size_type size, Number a, ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Default > &data)
static void add_vector(const std::shared_ptr<::parallel::internal::TBBPartitioner > &, const size_type size, const ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Default > &v_data, ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Default > &data)
static void norm_1(const std::shared_ptr<::parallel::internal::TBBPartitioner > &, const size_type size, real_type &sum, ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Default > &data, const size_type optional_offset=0)
static void add_avpbw(const std::shared_ptr<::parallel::internal::TBBPartitioner > &, const size_type size, const Number a, const Number b, const ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Default > &v_data, const ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Default > &w_data, ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Default > &data)
static void set(const std::shared_ptr<::parallel::internal::TBBPartitioner > &, const size_type size, const Number s, ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Default > &data)
static void norm_2(const std::shared_ptr<::parallel::internal::TBBPartitioner > &thread_loop_partitioner, const size_type size, real_type &sum, ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Default > &data)
static void import_elements(const std::shared_ptr<::parallel::internal::TBBPartitioner > &, const size_type size, VectorOperation::values operation, const ::MemorySpace::MemorySpaceData< Number, MemorySpace2 > &v_data, ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Default > &data, std::enable_if_t< std::is_same_v< MemorySpace2, ::MemorySpace::Host >, int >=0)
static void sadd_xv(const std::shared_ptr<::parallel::internal::TBBPartitioner > &, const size_type size, const Number x, const ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Default > &v_data, ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Default > &data)
static void multiply_factor(const std::shared_ptr<::parallel::internal::TBBPartitioner > &, const size_type size, const Number factor, ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Default > &data)
static void scale(const std::shared_ptr<::parallel::internal::TBBPartitioner > &, const size_type size, const ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Default > &v_data, ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Default > &data)
static void equ_aubv(const std::shared_ptr<::parallel::internal::TBBPartitioner > &, const size_type size, const Number a, const Number b, const ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Default > &v_data, const ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Default > &w_data, ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Default > &data)
static void import_elements(const std::shared_ptr<::parallel::internal::TBBPartitioner > &thread_loop_partitioner, const size_type size, VectorOperation::values operation, const ::MemorySpace::MemorySpaceData< Number, MemorySpace2 > &v_data, ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Default > &data, std::enable_if_t< std::is_same_v< MemorySpace2, ::MemorySpace::Default >, int >=0)
static void equ_au(const std::shared_ptr<::parallel::internal::TBBPartitioner > &, const size_type size, const Number a, const ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Default > &v_data, ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Default > &data)
static Number mean_value(const std::shared_ptr<::parallel::internal::TBBPartitioner > &, const size_type, const ::MemorySpace::MemorySpaceData< Number, MemorySpace > &)
static void equ_au(const std::shared_ptr<::parallel::internal::TBBPartitioner > &, const size_type, const Number, const ::MemorySpace::MemorySpaceData< Number, MemorySpace > &, ::MemorySpace::MemorySpaceData< Number, MemorySpace > &)
static void add_avpbw(const std::shared_ptr<::parallel::internal::TBBPartitioner > &, const size_type, const Number, const Number, const ::MemorySpace::MemorySpaceData< Number, MemorySpace > &, const ::MemorySpace::MemorySpaceData< Number, MemorySpace > &, ::MemorySpace::MemorySpaceData< Number, MemorySpace > &)
static void sadd_xv(const std::shared_ptr<::parallel::internal::TBBPartitioner > &, const size_type, const Number, const ::MemorySpace::MemorySpaceData< Number, MemorySpace > &, ::MemorySpace::MemorySpaceData< Number, MemorySpace > &)
static void add_factor(const std::shared_ptr<::parallel::internal::TBBPartitioner > &, const size_type, Number, ::MemorySpace::MemorySpaceData< Number, MemorySpace > &)
static void norm_2(const std::shared_ptr<::parallel::internal::TBBPartitioner > &, const size_type, real_type &, const ::MemorySpace::MemorySpaceData< Number, MemorySpace > &, ::MemorySpace::MemorySpaceData< Number, MemorySpace > &)
static void add_vector(const std::shared_ptr<::parallel::internal::TBBPartitioner > &, const size_type, const ::MemorySpace::MemorySpaceData< Number, MemorySpace > &, ::MemorySpace::MemorySpaceData< Number, MemorySpace > &)
static void scale(const std::shared_ptr<::parallel::internal::TBBPartitioner > &, const size_type, const ::MemorySpace::MemorySpaceData< Number, MemorySpace > &, ::MemorySpace::MemorySpaceData< Number, MemorySpace > &)
static void subtract_vector(const std::shared_ptr<::parallel::internal::TBBPartitioner > &, const size_type, const ::MemorySpace::MemorySpaceData< Number, MemorySpace > &, ::MemorySpace::MemorySpaceData< Number, MemorySpace > &)
static void sadd_xavbw(const std::shared_ptr<::parallel::internal::TBBPartitioner > &, const size_type, const Number, const Number, const Number, const ::MemorySpace::MemorySpaceData< Number, MemorySpace > &, const ::MemorySpace::MemorySpaceData< Number, MemorySpace > &, ::MemorySpace::MemorySpaceData< Number, MemorySpace > &)
static Number dot(const std::shared_ptr<::parallel::internal::TBBPartitioner > &, const size_type, const ::MemorySpace::MemorySpaceData< Number2, MemorySpace > &, ::MemorySpace::MemorySpaceData< Number, MemorySpace > &)
static Number add_and_dot(const std::shared_ptr<::parallel::internal::TBBPartitioner > &, const size_type, const Number, const ::MemorySpace::MemorySpaceData< Number, MemorySpace > &, const ::MemorySpace::MemorySpaceData< Number, MemorySpace > &, ::MemorySpace::MemorySpaceData< Number, MemorySpace > &)
static void sadd_xav(const std::shared_ptr<::parallel::internal::TBBPartitioner > &, const size_type, const Number, const Number, const ::MemorySpace::MemorySpaceData< Number, MemorySpace > &, ::MemorySpace::MemorySpaceData< Number, MemorySpace > &)
static void import_elements(const std::shared_ptr<::parallel::internal::TBBPartitioner > &, const size_type, VectorOperation::values, const ::MemorySpace::MemorySpaceData< Number, MemorySpace2 > &, ::MemorySpace::MemorySpaceData< Number, MemorySpace > &)
static void copy(const std::shared_ptr<::parallel::internal::TBBPartitioner > &, const size_type, const ::MemorySpace::MemorySpaceData< Number2, MemorySpace > &, ::MemorySpace::MemorySpaceData< Number, MemorySpace > &)
static void norm_1(const std::shared_ptr<::parallel::internal::TBBPartitioner > &, const size_type, real_type &, Number *, Number *)
static void add_av(const std::shared_ptr<::parallel::internal::TBBPartitioner > &, const size_type, const Number, const ::MemorySpace::MemorySpaceData< Number, MemorySpace > &, ::MemorySpace::MemorySpaceData< Number, MemorySpace > &)
static void multiply_factor(const std::shared_ptr<::parallel::internal::TBBPartitioner > &, const size_type, const Number, ::MemorySpace::MemorySpaceData< Number, MemorySpace > &)
static void norm_p(const std::shared_ptr<::parallel::internal::TBBPartitioner > &, const size_type, real_type &, real_type, ::MemorySpace::MemorySpaceData< Number, MemorySpace > &)
static void equ_aubv(const std::shared_ptr<::parallel::internal::TBBPartitioner > &, const size_type, const Number, const Number, const ::MemorySpace::MemorySpaceData< Number, MemorySpace > &, const ::MemorySpace::MemorySpaceData< Number, MemorySpace > &, ::MemorySpace::MemorySpaceData< Number, MemorySpace > &)
static void set(const std::shared_ptr<::parallel::internal::TBBPartitioner > &, const size_type, const Number, ::MemorySpace::MemorySpaceData< Number, MemorySpace > &)
static real_type abs(const number &x)
static constexpr real_type abs_square(const number &x)