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>
71 copy(
const T *begin,
const T *end, U *dest)
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."));
172 std::shared_ptr<tbb::affinity_partitioner> tbb_partitioner =
173 partitioner->acquire_one_partitioner();
189 partitioner->release_one_partitioner(tbb_partitioner);
191 else if (vec_size > 0)
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));
255 const OtherNumber *
const src;
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>
1006 result = 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)
1042 a.
load(outer_results + j);
1043 b.load(outer_results + j + n_lanes);
1045 a.
store(outer_results + n_chunks);
1050 if (Operation::vectorizes)
1055 ResultType *result_ptr = outer_results + j;
1057 for (
unsigned int i = 0; i < 8; ++i)
1058 result_ptr[i] = result_ptr[i] + result_ptr[i + 8];
1060 for (
unsigned int i = 0; i < 4; ++i)
1061 result_ptr[i] = result_ptr[i] + result_ptr[i + 4];
1063 for (
unsigned int i = 0; i < 2; ++i)
1064 result_ptr[i] = result_ptr[i] + result_ptr[i + 2];
1065 result = result_ptr[0] + result_ptr[1];
1072 for (; j + 1 < n_chunks; j += 2, ++n_chunks)
1073 outer_results[n_chunks] =
1074 outer_results[j] + outer_results[j + 1];
1079 result = outer_results[n_chunks - 1];
1091 ResultType r0, r1, r2, r3;
1095 first + 2 * new_size,
1096 first + 3 * new_size,
1099 result = (r0 + r1) + (r2 + r3);
1111 template <
typename Operation,
typename ResultType>
1116 ResultType *outer_results,
1117 std::bool_constant<false>)
1125 for (
size_type i = 0; i < n_chunks; ++i)
1128 for (
unsigned int k = 0; k < 2; ++k)
1130 ResultType r0 = op(
index);
1131 ResultType r1 = op(
index + 1);
1132 ResultType r2 = op(
index + 2);
1133 ResultType r3 = op(
index + 3);
1138 r1 += op(
index + 1);
1139 r2 += op(
index + 2);
1140 r3 += op(
index + 3);
1142 r += (r0 + r1) + (r2 + r3);
1144 outer_results[i] = r;
1147 if (n_chunks * 32 < vec_size)
1149 const size_type remainder = vec_size - n_chunks * 32;
1150 const size_type inner_chunks = remainder / 8;
1151 const size_type remainder_inner = remainder % 8;
1152 ResultType r0 = ResultType(), r1 = ResultType(), r2 = ResultType();
1153 switch (inner_chunks)
1172 for (
size_type j = 0; j < remainder_inner; ++j)
1174 outer_results[n_chunks++] = (r0 + r2) + r1;
1193 template <
typename Operation,
typename Number>
1198 Number *outer_results,
1199 std::bool_constant<true>)
1211 const size_type regular_chunks = vec_size / (32 * n_lanes);
1212 for (
size_type i = 0; i < regular_chunks; ++i)
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);
1231 r += (r0 + r1) + (r2 + r3);
1233 r.
store(&outer_results[i * n_lanes]);
1242 static_assert(n_lanes <= 16 && 16 % n_lanes == 0,
1243 "VectorizedArray::size() must be 1, 2, 4, 8, or 16");
1244 size_type n_chunks = regular_chunks * n_lanes;
1245 const size_type start_irregular = regular_chunks * n_lanes * 32;
1246 if (start_irregular < vec_size)
1250 const size_type remainder = vec_size - start_irregular;
1251 const size_type loop_length = remainder / (2 * n_lanes);
1252 for (
size_type j = 0; j < loop_length; ++j,
index += 2 * n_lanes)
1254 r0 += op.do_vectorized(
index);
1255 r1 += op.do_vectorized(
index + n_lanes);
1257 Number scalar_part = Number();
1258 size_type last = remainder % (2 * n_lanes);
1261 if (last >= n_lanes)
1263 r0 += op.do_vectorized(
index);
1267 for (
unsigned int i = 0; i < last; ++i)
1268 scalar_part += op(
index++);
1272 r0.
store(&outer_results[n_chunks]);
1273 outer_results[n_chunks] += scalar_part;
1277 n_chunks += n_lanes;
1288#ifdef DEAL_II_WITH_TBB
1317 template <
typename Operation,
typename ResultType>
1331 const unsigned int gs =
1366 for (
size_type i = range.begin(); i < range.end(); ++i)
1407 template <
typename Operation,
typename ResultType>
1413 const Operation &op,
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."));
1432 std::shared_ptr<tbb::affinity_partitioner> tbb_partitioner =
1433 partitioner->acquire_one_partitioner();
1451 partitioner->release_one_partitioner(tbb_partitioner);
1452 result = generic_functor.
do_sum();
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::
1721 MemorySpaceData<Number2, ::
MemorySpace::Host> &v_data,
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::
1750 MemorySpaceData<Number, ::
MemorySpace::Host> &v_data,
1756 v_data.values.data());
1762 const std::shared_ptr<::parallel::internal::TBBPartitioner>
1763 &thread_loop_partitioner,
1765 const ::MemorySpace::
1766 MemorySpaceData<Number, ::
MemorySpace::Host> &v_data,
1772 v_data.values.data());
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::
1796 MemorySpaceData<Number, ::
MemorySpace::Host> &v_data,
1802 v_data.values.data(),
1809 const std::shared_ptr<::parallel::internal::TBBPartitioner>
1810 &thread_loop_partitioner,
1814 const ::MemorySpace::
1815 MemorySpaceData<Number, ::
MemorySpace::Host> &v_data,
1817 MemorySpaceData<Number, ::
MemorySpace::Host> &w_data,
1823 data.values.data(), v_data.values.data(), w_data.values.data(), a, b);
1829 const std::shared_ptr<::parallel::internal::TBBPartitioner>
1830 &thread_loop_partitioner,
1833 const ::MemorySpace::
1834 MemorySpaceData<Number, ::
MemorySpace::Host> &v_data,
1840 v_data.values.data(),
1847 const std::shared_ptr<::parallel::internal::TBBPartitioner>
1848 &thread_loop_partitioner,
1852 const ::MemorySpace::
1853 MemorySpaceData<Number, ::
MemorySpace::Host> &v_data,
1859 v_data.values.data(),
1867 const std::shared_ptr<::parallel::internal::TBBPartitioner>
1868 &thread_loop_partitioner,
1873 const ::MemorySpace::
1874 MemorySpaceData<Number, ::
MemorySpace::Host> &v_data,
1876 MemorySpaceData<Number, ::
MemorySpace::Host> &w_data,
1882 v_data.values.data(),
1883 w_data.values.data(),
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::
1910 MemorySpaceData<Number, ::
MemorySpace::Host> &v_data,
1916 v_data.values.data());
1921 equ_au(
const std::shared_ptr<::parallel::internal::TBBPartitioner>
1922 &thread_loop_partitioner,
1925 const ::MemorySpace::
1926 MemorySpaceData<Number, ::
MemorySpace::Host> &v_data,
1932 v_data.values.data(),
1939 const std::shared_ptr<::parallel::internal::TBBPartitioner>
1940 &thread_loop_partitioner,
1944 const ::MemorySpace::
1945 MemorySpaceData<Number, ::
MemorySpace::Host> &v_data,
1947 MemorySpaceData<Number, ::
MemorySpace::Host> &w_data,
1953 data.values.data(), v_data.values.data(), w_data.values.data(), a, b);
1958 dot(
const std::shared_ptr<::parallel::internal::TBBPartitioner>
1959 &thread_loop_partitioner,
1961 const ::MemorySpace::
1962 MemorySpaceData<Number2, ::
MemorySpace::Host> &v_data,
1969 data.values.data(), v_data.values.data());
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,
2020 optional_offset +
size,
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::
2047 MemorySpaceData<Number, ::
MemorySpace::Host> &v_data,
2049 MemorySpaceData<Number, ::
MemorySpace::Host> &w_data,
2056 v_data.values.data(),
2057 w_data.values.data(),
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)),
2115 Kokkos::subview(v_data.values,
2116 Kokkos::pair<size_type, size_type>(0,
size)));
2127 template <
typename Number>
2132 const std::shared_ptr<::parallel::internal::TBBPartitioner> &,
2134 const ::MemorySpace::
2135 MemorySpaceData<Number, ::
MemorySpace::Default> &v_data,
2141 Kokkos::subview(
data.values,
2142 Kokkos::pair<size_type, size_type>(0,
size)),
2143 Kokkos::subview(v_data.values,
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::
2166 MemorySpaceData<Number, ::
MemorySpace::Default> &v_data,
2171 auto exec = typename ::MemorySpace::Default::kokkos_space::
2173 Kokkos::parallel_for(
2175 Kokkos::RangePolicy<
2176 ::MemorySpace::Default::kokkos_space::execution_space>(
2178 KOKKOS_LAMBDA(
int i) {
data.values(i) += v_data.values(i); });
2184 const std::shared_ptr<::parallel::internal::TBBPartitioner> &,
2186 const ::MemorySpace::
2187 MemorySpaceData<Number, ::
MemorySpace::Default> &v_data,
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>(
2199 KOKKOS_LAMBDA(
size_type i) {
data.values(i) -= v_data.values(i); });
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::
2229 MemorySpaceData<Number, ::
MemorySpace::Default> &v_data,
2234 auto exec = typename ::MemorySpace::Default::kokkos_space::
2236 Kokkos::parallel_for(
2238 Kokkos::RangePolicy<
2239 ::MemorySpace::Default::kokkos_space::execution_space>(
2242 data.values(i) += a * v_data.values(i);
2249 const std::shared_ptr<::parallel::internal::TBBPartitioner> &,
2253 const ::MemorySpace::
2254 MemorySpaceData<Number, ::
MemorySpace::Default> &v_data,
2256 MemorySpaceData<Number, ::
MemorySpace::Default> &w_data,
2261 auto exec = typename ::MemorySpace::Default::kokkos_space::
2263 Kokkos::parallel_for(
2265 Kokkos::RangePolicy<
2266 ::MemorySpace::Default::kokkos_space::execution_space>(
2269 data.values(i) += a * v_data.values(i) + b * w_data.values(i);
2276 const std::shared_ptr<::parallel::internal::TBBPartitioner> &,
2279 const ::MemorySpace::
2280 MemorySpaceData<Number, ::
MemorySpace::Default> &v_data,
2285 auto exec = typename ::MemorySpace::Default::kokkos_space::
2287 Kokkos::parallel_for(
2289 Kokkos::RangePolicy<
2290 ::MemorySpace::Default::kokkos_space::execution_space>(
2293 data.values(i) = x *
data.values(i) + v_data.values(i);
2300 const std::shared_ptr<::parallel::internal::TBBPartitioner> &,
2304 const ::MemorySpace::
2305 MemorySpaceData<Number, ::
MemorySpace::Default> &v_data,
2310 auto exec = typename ::MemorySpace::Default::kokkos_space::
2312 Kokkos::parallel_for(
2314 Kokkos::RangePolicy<
2315 ::MemorySpace::Default::kokkos_space::execution_space>(
2318 data.values(i) = x *
data.values(i) + a * v_data.values(i);
2325 const std::shared_ptr<::parallel::internal::TBBPartitioner> &,
2330 const ::MemorySpace::
2331 MemorySpaceData<Number, ::
MemorySpace::Default> &v_data,
2333 MemorySpaceData<Number, ::
MemorySpace::Default> &w_data,
2338 auto exec = typename ::MemorySpace::Default::kokkos_space::
2340 Kokkos::parallel_for(
2342 Kokkos::RangePolicy<
2343 ::MemorySpace::Default::kokkos_space::execution_space>(
2347 x *
data.values(i) + a * v_data.values(i) + b * w_data.values(i);
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::
2377 MemorySpaceData<Number, ::
MemorySpace::Default> &v_data,
2382 auto exec = typename ::MemorySpace::Default::kokkos_space::
2384 Kokkos::parallel_for(
2386 Kokkos::RangePolicy<
2387 ::MemorySpace::Default::kokkos_space::execution_space>(
2389 KOKKOS_LAMBDA(
size_type i) {
data.values(i) *= v_data.values(i); });
2395 const std::shared_ptr<::parallel::internal::TBBPartitioner> &,
2398 const ::MemorySpace::
2399 MemorySpaceData<Number, ::
MemorySpace::Default> &v_data,
2404 auto exec = typename ::MemorySpace::Default::kokkos_space::
2406 Kokkos::parallel_for(
2408 Kokkos::RangePolicy<
2409 ::MemorySpace::Default::kokkos_space::execution_space>(
2412 data.values(i) = a * v_data.values(i);
2419 const std::shared_ptr<::parallel::internal::TBBPartitioner> &,
2423 const ::MemorySpace::
2424 MemorySpaceData<Number, ::
MemorySpace::Default> &v_data,
2426 MemorySpaceData<Number, ::
MemorySpace::Default> &w_data,
2431 auto exec = typename ::MemorySpace::Default::kokkos_space::
2433 Kokkos::parallel_for(
2435 Kokkos::RangePolicy<
2436 ::MemorySpace::Default::kokkos_space::execution_space>(
2439 data.values(i) = a * v_data.values(i) + b * w_data.values(i);
2445 dot(
const std::shared_ptr<::parallel::internal::TBBPartitioner> &,
2447 const ::MemorySpace::
2448 MemorySpaceData<Number, ::
MemorySpace::Default> &v_data,
2455 auto exec = typename ::MemorySpace::Default::kokkos_space::
2457 Kokkos::parallel_reduce(
2459 Kokkos::RangePolicy<
2460 ::MemorySpace::Default::kokkos_space::execution_space>(
2462 KOKKOS_LAMBDA(
size_type i, Number & update) {
2463 update +=
data.values(i) * v_data.values(i);
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>(
2499 KOKKOS_LAMBDA(
size_type i, Number & update) {
2500 update +=
data.values(i);
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>(
2525 exec, optional_offset, optional_offset +
size),
2526 KOKKOS_LAMBDA(
size_type i, Number & update) {
2527#if KOKKOS_VERSION < 30400
2529#elif KOKKOS_VERSION < 30700
2530 update += Kokkos::Experimental::fabs(
data.values(i));
2532 update += Kokkos::abs(
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>(
2556 KOKKOS_LAMBDA(
size_type i, Number & update) {
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::
2575 MemorySpaceData<Number, ::
MemorySpace::Default> &v_data,
2577 MemorySpaceData<Number, ::
MemorySpace::Default> &w_data,
2584 auto exec = typename ::MemorySpace::Default::kokkos_space::
2586 Kokkos::parallel_reduce(
2588 Kokkos::RangePolicy<
2589 ::MemorySpace::Default::kokkos_space::execution_space>(
2591 KOKKOS_LAMBDA(
size_type i, Number & update) {
2592 data.values(i) += a * v_data.values(i);
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)),
2653 Kokkos::subview(v_data.values,
2654 Kokkos::pair<size_type, size_type>(0,
size)));
static unsigned int n_threads()
static constexpr std::size_t size()
void store(OtherNumber *ptr) const
void load(const OtherNumber *ptr)
#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)