16#ifndef dealii_vector_operations_internal_h
17#define dealii_vector_operations_internal_h
37 namespace VectorOperations
63 template <
typename T,
typename U>
65 copy(
const T *begin,
const T *end, U *dest)
67 std::copy(begin, end, dest);
70 template <
typename T,
typename U>
72 copy(
const std::complex<T> *begin,
73 const std::complex<T> *end,
74 std::complex<U> *dest)
76 std::copy(begin, end, dest);
79 template <
typename T,
typename U>
81 copy(
const std::complex<T> *,
const std::complex<T> *, U *)
84 ExcMessage(
"Can't convert a vector of complex numbers "
85 "into a vector of reals/doubles"));
90#ifdef DEAL_II_WITH_TBB
99 template <
typename Functor>
111 const unsigned int gs =
145 template <
typename Functor>
151 const std::shared_ptr<::parallel::internal::TBBPartitioner>
154#ifdef DEAL_II_WITH_TBB
162 Assert(partitioner.get() !=
nullptr,
164 "Unexpected initialization of Vector that does "
165 "not set the TBB partitioner to a usable state."));
166 std::shared_ptr<tbb::affinity_partitioner> tbb_partitioner =
167 partitioner->acquire_one_partitioner();
183 partitioner->release_one_partitioner(tbb_partitioner);
185 else if (vec_size > 0)
197 template <
typename Number>
212 if (
value == Number())
214 if constexpr (std::is_trivial_v<Number>)
216 std::memset(
dst + begin, 0,
sizeof(Number) * (end - begin));
227 template <
typename Number,
typename OtherNumber>
243 if constexpr (std::is_trivially_copyable<Number>() &&
244 std::is_same_v<Number, OtherNumber>)
245 std::memcpy(
dst + begin,
src + begin, (end - begin) *
sizeof(Number));
254 const OtherNumber *
const src;
258 template <
typename Number>
290 template <
typename Number>
294 const Number *
const v_val,
325 template <
typename Number>
329 const Number *
const v_val,
364 template <
typename Number>
392 template <
typename Number>
422 template <
typename Number>
450 template <
typename Number>
454 const Number *
const v_val,
455 const Number *
const w_val,
490 template <
typename Number>
494 const Number *
const v_val,
524 template <
typename Number>
567 template <
typename Number>
595 template <
typename Number>
599 const Number *
const u_val,
629 template <
typename Number>
633 const Number *
const u_val,
634 const Number *
const v_val,
669 template <
typename Number>
715 template <
typename Number>
752 template <
typename Number,
typename Number2>
755 static constexpr bool vectorizes = std::is_same_v<Number, Number2> &&
758 Dot(
const Number *
const X,
const Number2 *
const Y)
784 "This operation is not correctly implemented for "
785 "complex-valued objects.");
789 const Number *
const X;
790 const Number2 *
const Y;
793 template <
typename Number,
typename RealType>
816 const Number *
const X;
819 template <
typename Number,
typename RealType>
845 template <
typename Number,
typename RealType>
873 template <
typename Number>
899 template <
typename Number>
905 const Number *
const V,
906 const Number *
const W,
941 "This operation is not correctly implemented for "
942 "complex-valued objects.");
947 const Number *
const V;
948 const Number *
const W;
996 template <
typename Operation,
typename ResultType>
1005 result = ResultType();
1028 std::bool_constant<Operation::vectorizes>());
1037 for (; j + 2 * n_lanes - 1 < n_chunks;
1038 j += 2 * n_lanes, n_chunks += n_lanes)
1041 a.
load(outer_results + j);
1042 b.load(outer_results + j + n_lanes);
1044 a.
store(outer_results + n_chunks);
1049 if (Operation::vectorizes)
1054 ResultType *result_ptr = outer_results + j;
1056 for (
unsigned int i = 0; i < 8; ++i)
1057 result_ptr[i] = result_ptr[i] + result_ptr[i + 8];
1059 for (
unsigned int i = 0; i < 4; ++i)
1060 result_ptr[i] = result_ptr[i] + result_ptr[i + 4];
1062 for (
unsigned int i = 0; i < 2; ++i)
1063 result_ptr[i] = result_ptr[i] + result_ptr[i + 2];
1064 result = result_ptr[0] + result_ptr[1];
1071 for (; j + 1 < n_chunks; j += 2, ++n_chunks)
1072 outer_results[n_chunks] =
1073 outer_results[j] + outer_results[j + 1];
1078 result = outer_results[n_chunks - 1];
1090 ResultType r0, r1, r2, r3;
1094 first + 2 * new_size,
1095 first + 3 * new_size,
1098 result = (r0 + r1) + (r2 + r3);
1110 template <
typename Operation,
typename ResultType>
1115 ResultType *outer_results,
1116 std::bool_constant<false>)
1124 for (
size_type i = 0; i < n_chunks; ++i)
1127 for (
unsigned int k = 0; k < 2; ++k)
1129 ResultType r0 = op(
index);
1130 ResultType r1 = op(
index + 1);
1131 ResultType r2 = op(
index + 2);
1132 ResultType r3 = op(
index + 3);
1137 r1 += op(
index + 1);
1138 r2 += op(
index + 2);
1139 r3 += op(
index + 3);
1141 r += (r0 + r1) + (r2 + r3);
1143 outer_results[i] = r;
1146 if (n_chunks * 32 < vec_size)
1148 const size_type remainder = vec_size - n_chunks * 32;
1149 const size_type inner_chunks = remainder / 8;
1150 const size_type remainder_inner = remainder % 8;
1151 ResultType r0 = ResultType(), r1 = ResultType(), r2 = ResultType();
1152 switch (inner_chunks)
1171 for (
size_type j = 0; j < remainder_inner; ++j)
1173 outer_results[n_chunks++] = (r0 + r2) + r1;
1192 template <
typename Operation,
typename Number>
1197 Number *outer_results,
1198 std::bool_constant<true>)
1210 const size_type regular_chunks = vec_size / (32 * n_lanes);
1211 for (
size_type i = 0; i < regular_chunks; ++i)
1214 for (
unsigned int k = 0; k < 2; ++k)
1219 op.do_vectorized(
index + 2 * n_lanes);
1221 op.do_vectorized(
index + 3 * n_lanes);
1222 index += n_lanes * 4;
1225 r0 += op.do_vectorized(
index);
1226 r1 += op.do_vectorized(
index + n_lanes);
1227 r2 += op.do_vectorized(
index + 2 * n_lanes);
1228 r3 += op.do_vectorized(
index + 3 * n_lanes);
1230 r += (r0 + r1) + (r2 + r3);
1232 r.
store(&outer_results[i * n_lanes]);
1241 static_assert(n_lanes <= 16 && 16 % n_lanes == 0,
1242 "VectorizedArray::size() must be 1, 2, 4, 8, or 16");
1243 size_type n_chunks = regular_chunks * n_lanes;
1244 const size_type start_irregular = regular_chunks * n_lanes * 32;
1245 if (start_irregular < vec_size)
1249 const size_type remainder = vec_size - start_irregular;
1250 const size_type loop_length = remainder / (2 * n_lanes);
1251 for (
size_type j = 0; j < loop_length; ++j,
index += 2 * n_lanes)
1253 r0 += op.do_vectorized(
index);
1254 r1 += op.do_vectorized(
index + n_lanes);
1256 Number scalar_part = Number();
1257 size_type last = remainder % (2 * n_lanes);
1260 if (last >= n_lanes)
1262 r0 += op.do_vectorized(
index);
1266 for (
unsigned int i = 0; i < last; ++i)
1267 scalar_part += op(
index++);
1271 r0.
store(&outer_results[n_chunks]);
1272 outer_results[n_chunks] += scalar_part;
1276 n_chunks += n_lanes;
1287#ifdef DEAL_II_WITH_TBB
1316 template <
typename Operation,
typename ResultType>
1330 const unsigned int gs =
1365 for (
size_type i = range.begin(); i < range.end(); ++i)
1406 template <
typename Operation,
typename ResultType>
1412 const Operation &op,
1416 const std::shared_ptr<::parallel::internal::TBBPartitioner>
1419#ifdef DEAL_II_WITH_TBB
1427 Assert(partitioner.get() !=
nullptr,
1429 "Unexpected initialization of Vector that does "
1430 "not set the TBB partitioner to a usable state."));
1431 std::shared_ptr<tbb::affinity_partitioner> tbb_partitioner =
1432 partitioner->acquire_one_partitioner();
1450 partitioner->release_one_partitioner(tbb_partitioner);
1451 result = generic_functor.
do_sum();
1462 template <
typename Number,
typename Number2,
typename MemorySpace>
1467 const std::shared_ptr<::parallel::internal::TBBPartitioner> &
1470 const ::MemorySpace::MemorySpaceData<Number2, MemorySpace>
1475 std::is_same_v<MemorySpace, ::MemorySpace::Default> &&
1476 std::is_same_v<Number, Number2>,
1477 "For the Default MemorySpace Number and Number2 should be the same type");
1482 const std::shared_ptr<::parallel::internal::TBBPartitioner> &
1491 const std::shared_ptr<::parallel::internal::TBBPartitioner> &
1494 const ::MemorySpace::MemorySpaceData<Number, MemorySpace>
1501 const std::shared_ptr<::parallel::internal::TBBPartitioner> &
1504 const ::MemorySpace::MemorySpaceData<Number, MemorySpace>
1511 const std::shared_ptr<::parallel::internal::TBBPartitioner> &
1520 const std::shared_ptr<::parallel::internal::TBBPartitioner> &
1524 const ::MemorySpace::MemorySpaceData<Number, MemorySpace>
1531 const std::shared_ptr<::parallel::internal::TBBPartitioner> &
1536 const ::MemorySpace::MemorySpaceData<Number, MemorySpace>
1538 const ::MemorySpace::MemorySpaceData<Number, MemorySpace>
1545 const std::shared_ptr<::parallel::internal::TBBPartitioner> &
1549 const ::MemorySpace::MemorySpaceData<Number, MemorySpace>
1556 const std::shared_ptr<::parallel::internal::TBBPartitioner> &
1561 const ::MemorySpace::MemorySpaceData<Number, MemorySpace>
1568 const std::shared_ptr<::parallel::internal::TBBPartitioner> &
1574 const ::MemorySpace::MemorySpaceData<Number, MemorySpace>
1576 const ::MemorySpace::MemorySpaceData<Number, MemorySpace>
1583 const std::shared_ptr<::parallel::internal::TBBPartitioner> &
1592 const std::shared_ptr<::parallel::internal::TBBPartitioner> &
1595 const ::MemorySpace::MemorySpaceData<Number, MemorySpace>
1602 const std::shared_ptr<::parallel::internal::TBBPartitioner> &
1606 const ::MemorySpace::MemorySpaceData<Number, MemorySpace>
1613 const std::shared_ptr<::parallel::internal::TBBPartitioner> &
1618 const ::MemorySpace::MemorySpaceData<Number, MemorySpace>
1620 const ::MemorySpace::MemorySpaceData<Number, MemorySpace>
1627 const std::shared_ptr<::parallel::internal::TBBPartitioner> &
1630 const ::MemorySpace::MemorySpaceData<Number2, MemorySpace>
1637 template <
typename real_type>
1640 const std::shared_ptr<::parallel::internal::TBBPartitioner> &
1644 const ::MemorySpace::MemorySpaceData<Number, MemorySpace>
1651 const std::shared_ptr<::parallel::internal::TBBPartitioner> &
1654 const ::MemorySpace::MemorySpaceData<Number, MemorySpace>
1660 template <
typename real_type>
1663 const std::shared_ptr<::parallel::internal::TBBPartitioner> &
1671 template <
typename real_type>
1674 const std::shared_ptr<::parallel::internal::TBBPartitioner> &
1684 const std::shared_ptr<::parallel::internal::TBBPartitioner> &
1688 const ::MemorySpace::MemorySpaceData<Number, MemorySpace>
1690 const ::MemorySpace::MemorySpaceData<Number, MemorySpace>
1697 template <
typename MemorySpace2>
1700 const std::shared_ptr<::parallel::internal::TBBPartitioner> &
1704 const ::MemorySpace::MemorySpaceData<Number, MemorySpace2>
1712 template <
typename Number,
typename Number2>
1716 copy(
const std::shared_ptr<::parallel::internal::TBBPartitioner>
1717 &thread_loop_partitioner,
1719 const ::MemorySpace::
1720 MemorySpaceData<Number2, ::
MemorySpace::Host> &v_data,
1726 data.values.data());
1731 set(
const std::shared_ptr<::parallel::internal::TBBPartitioner>
1732 &thread_loop_partitioner,
1745 const std::shared_ptr<::parallel::internal::TBBPartitioner>
1746 &thread_loop_partitioner,
1748 const ::MemorySpace::
1749 MemorySpaceData<Number, ::
MemorySpace::Host> &v_data,
1755 v_data.values.data());
1761 const std::shared_ptr<::parallel::internal::TBBPartitioner>
1762 &thread_loop_partitioner,
1764 const ::MemorySpace::
1765 MemorySpaceData<Number, ::
MemorySpace::Host> &v_data,
1771 v_data.values.data());
1777 const std::shared_ptr<::parallel::internal::TBBPartitioner>
1778 &thread_loop_partitioner,
1790 add_av(
const std::shared_ptr<::parallel::internal::TBBPartitioner>
1791 &thread_loop_partitioner,
1794 const ::MemorySpace::
1795 MemorySpaceData<Number, ::
MemorySpace::Host> &v_data,
1801 v_data.values.data(),
1808 const std::shared_ptr<::parallel::internal::TBBPartitioner>
1809 &thread_loop_partitioner,
1813 const ::MemorySpace::
1814 MemorySpaceData<Number, ::
MemorySpace::Host> &v_data,
1816 MemorySpaceData<Number, ::
MemorySpace::Host> &w_data,
1822 data.values.data(), v_data.values.data(), w_data.values.data(), a, b);
1828 const std::shared_ptr<::parallel::internal::TBBPartitioner>
1829 &thread_loop_partitioner,
1832 const ::MemorySpace::
1833 MemorySpaceData<Number, ::
MemorySpace::Host> &v_data,
1839 v_data.values.data(),
1846 const std::shared_ptr<::parallel::internal::TBBPartitioner>
1847 &thread_loop_partitioner,
1851 const ::MemorySpace::
1852 MemorySpaceData<Number, ::
MemorySpace::Host> &v_data,
1858 v_data.values.data(),
1866 const std::shared_ptr<::parallel::internal::TBBPartitioner>
1867 &thread_loop_partitioner,
1872 const ::MemorySpace::
1873 MemorySpaceData<Number, ::
MemorySpace::Host> &v_data,
1875 MemorySpaceData<Number, ::
MemorySpace::Host> &w_data,
1881 v_data.values.data(),
1882 w_data.values.data(),
1891 const std::shared_ptr<::parallel::internal::TBBPartitioner>
1892 &thread_loop_partitioner,
1894 const Number factor,
1900 data.values.data(), factor);
1905 scale(
const std::shared_ptr<::parallel::internal::TBBPartitioner>
1906 &thread_loop_partitioner,
1908 const ::MemorySpace::
1909 MemorySpaceData<Number, ::
MemorySpace::Host> &v_data,
1915 v_data.values.data());
1920 equ_au(
const std::shared_ptr<::parallel::internal::TBBPartitioner>
1921 &thread_loop_partitioner,
1924 const ::MemorySpace::
1925 MemorySpaceData<Number, ::
MemorySpace::Host> &v_data,
1931 v_data.values.data(),
1938 const std::shared_ptr<::parallel::internal::TBBPartitioner>
1939 &thread_loop_partitioner,
1943 const ::MemorySpace::
1944 MemorySpaceData<Number, ::
MemorySpace::Host> &v_data,
1946 MemorySpaceData<Number, ::
MemorySpace::Host> &w_data,
1952 data.values.data(), v_data.values.data(), w_data.values.data(), a, b);
1957 dot(
const std::shared_ptr<::parallel::internal::TBBPartitioner>
1958 &thread_loop_partitioner,
1960 const ::MemorySpace::
1961 MemorySpaceData<Number2, ::
MemorySpace::Host> &v_data,
1968 data.values.data(), v_data.values.data());
1970 dot, 0,
size, sum, thread_loop_partitioner);
1976 template <
typename real_type>
1978 norm_2(
const std::shared_ptr<::parallel::internal::TBBPartitioner>
1979 &thread_loop_partitioner,
1992 const std::shared_ptr<::parallel::internal::TBBPartitioner>
1993 &thread_loop_partitioner,
1995 const ::MemorySpace::
2005 template <
typename real_type>
2007 norm_1(
const std::shared_ptr<::parallel::internal::TBBPartitioner>
2008 &thread_loop_partitioner,
2019 template <
typename real_type>
2021 norm_p(
const std::shared_ptr<::parallel::internal::TBBPartitioner>
2022 &thread_loop_partitioner,
2036 const std::shared_ptr<::parallel::internal::TBBPartitioner>
2037 &thread_loop_partitioner,
2040 const ::MemorySpace::
2041 MemorySpaceData<Number, ::
MemorySpace::Host> &v_data,
2043 MemorySpaceData<Number, ::
MemorySpace::Host> &w_data,
2050 v_data.values.data(),
2051 w_data.values.data(),
2058 template <
typename MemorySpace2>
2061 const std::shared_ptr<::parallel::internal::TBBPartitioner>
2062 &thread_loop_partitioner,
2065 const ::MemorySpace::MemorySpaceData<Number, MemorySpace2>
2071 std::is_same_v<MemorySpace2, ::MemorySpace::Host>,
2088 template <
typename MemorySpace2>
2091 const std::shared_ptr<::parallel::internal::TBBPartitioner>
2095 const ::MemorySpace::MemorySpaceData<Number, MemorySpace2>
2101 std::is_same_v<MemorySpace2, ::MemorySpace::Default>,
2107 Kokkos::subview(
data.values,
2108 Kokkos::pair<size_type, size_type>(0,
size)),
2109 Kokkos::subview(v_data.values,
2110 Kokkos::pair<size_type, size_type>(0,
size)));
2121 template <
typename Number>
2126 const std::shared_ptr<::parallel::internal::TBBPartitioner> &,
2128 const ::MemorySpace::
2129 MemorySpaceData<Number, ::
MemorySpace::Default> &v_data,
2135 Kokkos::subview(
data.values,
2136 Kokkos::pair<size_type, size_type>(0,
size)),
2137 Kokkos::subview(v_data.values,
2138 Kokkos::pair<size_type, size_type>(0,
size)));
2142 set(
const std::shared_ptr<::parallel::internal::TBBPartitioner> &,
2150 Kokkos::subview(
data.values,
2151 Kokkos::pair<size_type, size_type>(0,
size)),
2157 const std::shared_ptr<::parallel::internal::TBBPartitioner> &,
2159 const ::MemorySpace::
2160 MemorySpaceData<Number, ::
MemorySpace::Default> &v_data,
2165 auto exec = typename ::MemorySpace::Default::kokkos_space::
2167 Kokkos::parallel_for(
2169 Kokkos::RangePolicy<
2170 ::MemorySpace::Default::kokkos_space::execution_space>(
2172 KOKKOS_LAMBDA(
int i) {
data.values(i) += v_data.values(i); });
2178 const std::shared_ptr<::parallel::internal::TBBPartitioner> &,
2180 const ::MemorySpace::
2181 MemorySpaceData<Number, ::
MemorySpace::Default> &v_data,
2186 auto exec = typename ::MemorySpace::Default::kokkos_space::
2188 Kokkos::parallel_for(
2189 "::subtract_vector",
2190 Kokkos::RangePolicy<
2191 ::MemorySpace::Default::kokkos_space::execution_space>(
2193 KOKKOS_LAMBDA(
size_type i) {
data.values(i) -= v_data.values(i); });
2199 const std::shared_ptr<::parallel::internal::TBBPartitioner> &,
2206 auto exec = typename ::MemorySpace::Default::kokkos_space::
2208 Kokkos::parallel_for(
2210 Kokkos::RangePolicy<
2211 ::MemorySpace::Default::kokkos_space::execution_space>(
2219 const std::shared_ptr<::parallel::internal::TBBPartitioner> &,
2222 const ::MemorySpace::
2223 MemorySpaceData<Number, ::
MemorySpace::Default> &v_data,
2228 auto exec = typename ::MemorySpace::Default::kokkos_space::
2230 Kokkos::parallel_for(
2232 Kokkos::RangePolicy<
2233 ::MemorySpace::Default::kokkos_space::execution_space>(
2236 data.values(i) += a * v_data.values(i);
2243 const std::shared_ptr<::parallel::internal::TBBPartitioner> &,
2247 const ::MemorySpace::
2248 MemorySpaceData<Number, ::
MemorySpace::Default> &v_data,
2250 MemorySpaceData<Number, ::
MemorySpace::Default> &w_data,
2255 auto exec = typename ::MemorySpace::Default::kokkos_space::
2257 Kokkos::parallel_for(
2259 Kokkos::RangePolicy<
2260 ::MemorySpace::Default::kokkos_space::execution_space>(
2263 data.values(i) += a * v_data.values(i) + b * w_data.values(i);
2270 const std::shared_ptr<::parallel::internal::TBBPartitioner> &,
2273 const ::MemorySpace::
2274 MemorySpaceData<Number, ::
MemorySpace::Default> &v_data,
2279 auto exec = typename ::MemorySpace::Default::kokkos_space::
2281 Kokkos::parallel_for(
2283 Kokkos::RangePolicy<
2284 ::MemorySpace::Default::kokkos_space::execution_space>(
2287 data.values(i) = x *
data.values(i) + v_data.values(i);
2294 const std::shared_ptr<::parallel::internal::TBBPartitioner> &,
2298 const ::MemorySpace::
2299 MemorySpaceData<Number, ::
MemorySpace::Default> &v_data,
2304 auto exec = typename ::MemorySpace::Default::kokkos_space::
2306 Kokkos::parallel_for(
2308 Kokkos::RangePolicy<
2309 ::MemorySpace::Default::kokkos_space::execution_space>(
2312 data.values(i) = x *
data.values(i) + a * v_data.values(i);
2319 const std::shared_ptr<::parallel::internal::TBBPartitioner> &,
2324 const ::MemorySpace::
2325 MemorySpaceData<Number, ::
MemorySpace::Default> &v_data,
2327 MemorySpaceData<Number, ::
MemorySpace::Default> &w_data,
2332 auto exec = typename ::MemorySpace::Default::kokkos_space::
2334 Kokkos::parallel_for(
2336 Kokkos::RangePolicy<
2337 ::MemorySpace::Default::kokkos_space::execution_space>(
2341 x *
data.values(i) + a * v_data.values(i) + b * w_data.values(i);
2348 const std::shared_ptr<::parallel::internal::TBBPartitioner> &,
2350 const Number factor,
2355 auto exec = typename ::MemorySpace::Default::kokkos_space::
2357 Kokkos::parallel_for(
2358 "::multiply_factor",
2359 Kokkos::RangePolicy<
2360 ::MemorySpace::Default::kokkos_space::execution_space>(
2368 const std::shared_ptr<::parallel::internal::TBBPartitioner> &,
2370 const ::MemorySpace::
2371 MemorySpaceData<Number, ::
MemorySpace::Default> &v_data,
2376 auto exec = typename ::MemorySpace::Default::kokkos_space::
2378 Kokkos::parallel_for(
2380 Kokkos::RangePolicy<
2381 ::MemorySpace::Default::kokkos_space::execution_space>(
2383 KOKKOS_LAMBDA(
size_type i) {
data.values(i) *= v_data.values(i); });
2389 const std::shared_ptr<::parallel::internal::TBBPartitioner> &,
2392 const ::MemorySpace::
2393 MemorySpaceData<Number, ::
MemorySpace::Default> &v_data,
2398 auto exec = typename ::MemorySpace::Default::kokkos_space::
2400 Kokkos::parallel_for(
2402 Kokkos::RangePolicy<
2403 ::MemorySpace::Default::kokkos_space::execution_space>(
2406 data.values(i) = a * v_data.values(i);
2413 const std::shared_ptr<::parallel::internal::TBBPartitioner> &,
2417 const ::MemorySpace::
2418 MemorySpaceData<Number, ::
MemorySpace::Default> &v_data,
2420 MemorySpaceData<Number, ::
MemorySpace::Default> &w_data,
2425 auto exec = typename ::MemorySpace::Default::kokkos_space::
2427 Kokkos::parallel_for(
2429 Kokkos::RangePolicy<
2430 ::MemorySpace::Default::kokkos_space::execution_space>(
2433 data.values(i) = a * v_data.values(i) + b * w_data.values(i);
2439 dot(
const std::shared_ptr<::parallel::internal::TBBPartitioner> &,
2441 const ::MemorySpace::
2442 MemorySpaceData<Number, ::
MemorySpace::Default> &v_data,
2449 auto exec = typename ::MemorySpace::Default::kokkos_space::
2451 Kokkos::parallel_reduce(
2453 Kokkos::RangePolicy<
2454 ::MemorySpace::Default::kokkos_space::execution_space>(
2456 KOKKOS_LAMBDA(
size_type i, Number & update) {
2457 update +=
data.values(i) * v_data.values(i);
2465 template <
typename real_type>
2467 norm_2(
const std::shared_ptr<::parallel::internal::TBBPartitioner>
2468 &thread_loop_partitioner,
2479 const std::shared_ptr<::parallel::internal::TBBPartitioner> &,
2481 const ::MemorySpace::
2486 auto exec = typename ::MemorySpace::Default::kokkos_space::
2488 Kokkos::parallel_reduce(
2490 Kokkos::RangePolicy<
2491 ::MemorySpace::Default::kokkos_space::execution_space>(
2493 KOKKOS_LAMBDA(
size_type i, Number & update) {
2494 update +=
data.values(i);
2502 template <
typename real_type>
2505 const std::shared_ptr<::parallel::internal::TBBPartitioner> &,
2512 auto exec = typename ::MemorySpace::Default::kokkos_space::
2514 Kokkos::parallel_reduce(
2516 Kokkos::RangePolicy<
2517 ::MemorySpace::Default::kokkos_space::execution_space>(
2519 KOKKOS_LAMBDA(
size_type i, Number & update) {
2520#if KOKKOS_VERSION < 30400
2522#elif KOKKOS_VERSION < 30700
2523 update += Kokkos::Experimental::fabs(
data.values(i));
2525 update += Kokkos::abs(
data.values(i));
2531 template <
typename real_type>
2534 const std::shared_ptr<::parallel::internal::TBBPartitioner> &,
2542 auto exec = typename ::MemorySpace::Default::kokkos_space::
2544 Kokkos::parallel_reduce(
2546 Kokkos::RangePolicy<
2547 ::MemorySpace::Default::kokkos_space::execution_space>(
2549 KOKKOS_LAMBDA(
size_type i, Number & update) {
2550#if KOKKOS_VERSION < 30400
2552#elif KOKKOS_VERSION < 30700
2553 update += Kokkos::Experimental::pow(
2554 Kokkos::Experimental::fabs(
data.values(i)), exp);
2556 update += Kokkos::pow(Kokkos::abs(
data.values(i)), exp);
2564 const std::shared_ptr<::parallel::internal::TBBPartitioner> &,
2567 const ::MemorySpace::
2568 MemorySpaceData<Number, ::
MemorySpace::Default> &v_data,
2570 MemorySpaceData<Number, ::
MemorySpace::Default> &w_data,
2577 auto exec = typename ::MemorySpace::Default::kokkos_space::
2579 Kokkos::parallel_reduce(
2581 Kokkos::RangePolicy<
2582 ::MemorySpace::Default::kokkos_space::execution_space>(
2584 KOKKOS_LAMBDA(
size_type i, Number & update) {
2585 data.values(i) += a * v_data.values(i);
2595 template <
typename MemorySpace2>
2598 const std::shared_ptr<::parallel::internal::TBBPartitioner>
2599 &thread_loop_partitioner,
2602 const ::MemorySpace::MemorySpaceData<Number, MemorySpace2>
2608 std::is_same_v<MemorySpace2, ::MemorySpace::Default>,
2625 template <
typename MemorySpace2>
2628 const std::shared_ptr<::parallel::internal::TBBPartitioner>
2632 const ::MemorySpace::MemorySpaceData<Number, MemorySpace2>
2638 std::is_same_v<MemorySpace2, ::MemorySpace::Host>,
2644 Kokkos::subview(
data.values,
2645 Kokkos::pair<size_type, size_type>(0,
size)),
2646 Kokkos::subview(v_data.values,
2647 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 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)
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 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 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 norm_1(const std::shared_ptr<::parallel::internal::TBBPartitioner > &, const size_type size, real_type &sum, ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Default > &data)
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)