17#ifndef dealii_vector_operations_internal_h
18#define dealii_vector_operations_internal_h
38 namespace VectorOperations
64 template <
typename T,
typename U>
66 copy(
const T *begin,
const T *end, U *dest)
68 std::copy(begin, end, dest);
71 template <
typename T,
typename U>
73 copy(
const std::complex<T> *begin,
74 const std::complex<T> *end,
75 std::complex<U> * dest)
77 std::copy(begin, end, dest);
80 template <
typename T,
typename U>
82 copy(
const std::complex<T> *,
const std::complex<T> *, U *)
85 ExcMessage(
"Can't convert a vector of complex numbers "
86 "into a vector of reals/doubles"));
91#ifdef DEAL_II_WITH_TBB
100 template <
typename Functor>
112 const unsigned int gs =
146 template <
typename Functor>
152 const std::shared_ptr<::parallel::internal::TBBPartitioner>
155#ifdef DEAL_II_WITH_TBB
163 Assert(partitioner.get() !=
nullptr,
165 "Unexpected initialization of Vector that does "
166 "not set the TBB partitioner to a usable state."));
167 std::shared_ptr<tbb::affinity_partitioner> tbb_partitioner =
168 partitioner->acquire_one_partitioner();
184 partitioner->release_one_partitioner(tbb_partitioner);
186 else if (vec_size > 0)
198 template <
typename Number>
213 if (
value == Number())
217 std::memset(
dst + begin, 0,
sizeof(Number) * (end - begin));
228 template <
typename Number,
typename OtherNumber>
248 std::memcpy(
dst + begin,
src + begin, (end - begin) *
sizeof(Number));
257 const OtherNumber *
const src;
261 template <
typename Number>
293 template <
typename Number>
297 const Number *
const v_val,
328 template <
typename Number>
332 const Number *
const v_val,
367 template <
typename Number>
395 template <
typename Number>
425 template <
typename Number>
453 template <
typename Number>
457 const Number *
const v_val,
458 const Number *
const w_val,
493 template <
typename Number>
497 const Number *
const v_val,
527 template <
typename Number>
570 template <
typename Number>
598 template <
typename Number>
602 const Number *
const u_val,
632 template <
typename Number>
636 const Number *
const u_val,
637 const Number *
const v_val,
672 template <
typename Number>
718 template <
typename Number>
755 template <
typename Number,
typename Number2>
758 static constexpr bool vectorizes = std::is_same<Number, Number2>::value &&
761 Dot(
const Number *
const X,
const Number2 *
const Y)
787 "This operation is not correctly implemented for "
788 "complex-valued objects.");
792 const Number *
const X;
793 const Number2 *
const Y;
796 template <
typename Number,
typename RealType>
819 const Number *
const X;
822 template <
typename Number,
typename RealType>
848 template <
typename Number,
typename RealType>
876 template <
typename Number>
902 template <
typename Number>
908 const Number *
const V,
909 const Number *
const W,
944 "This operation is not correctly implemented for "
945 "complex-valued objects.");
950 const Number *
const V;
951 const Number *
const W;
999 template <
typename Operation,
typename ResultType>
1004 ResultType & result)
1008 result = ResultType();
1031 std::integral_constant<bool, Operation::vectorizes>());
1040 for (; j + 2 * n_lanes - 1 < n_chunks;
1041 j += 2 * n_lanes, n_chunks += n_lanes)
1044 a.
load(outer_results + j);
1045 b.load(outer_results + j + n_lanes);
1047 a.
store(outer_results + n_chunks);
1052 if (Operation::vectorizes)
1057 ResultType *result_ptr = outer_results + j;
1059 for (
unsigned int i = 0; i < 8; ++i)
1060 result_ptr[i] = result_ptr[i] + result_ptr[i + 8];
1062 for (
unsigned int i = 0; i < 4; ++i)
1063 result_ptr[i] = result_ptr[i] + result_ptr[i + 4];
1065 for (
unsigned int i = 0; i < 2; ++i)
1066 result_ptr[i] = result_ptr[i] + result_ptr[i + 2];
1067 result = result_ptr[0] + result_ptr[1];
1074 for (; j + 1 < n_chunks; j += 2, ++n_chunks)
1075 outer_results[n_chunks] =
1076 outer_results[j] + outer_results[j + 1];
1081 result = outer_results[n_chunks - 1];
1093 ResultType r0, r1, r2, r3;
1097 first + 2 * new_size,
1098 first + 3 * new_size,
1101 result = (r0 + r1) + (r2 + r3);
1113 template <
typename Operation,
typename ResultType>
1118 ResultType * outer_results,
1119 std::integral_constant<bool, false>)
1127 for (
size_type i = 0; i < n_chunks; ++i)
1130 for (
unsigned int k = 0; k < 2; ++k)
1132 ResultType r0 = op(
index);
1133 ResultType r1 = op(
index + 1);
1134 ResultType r2 = op(
index + 2);
1135 ResultType r3 = op(
index + 3);
1140 r1 += op(
index + 1);
1141 r2 += op(
index + 2);
1142 r3 += op(
index + 3);
1144 r += (r0 + r1) + (r2 + r3);
1146 outer_results[i] = r;
1149 if (n_chunks * 32 < vec_size)
1151 const size_type remainder = vec_size - n_chunks * 32;
1152 const size_type inner_chunks = remainder / 8;
1153 const size_type remainder_inner = remainder % 8;
1154 ResultType r0 = ResultType(), r1 = ResultType(), r2 = ResultType();
1155 switch (inner_chunks)
1174 for (
size_type j = 0; j < remainder_inner; ++j)
1176 outer_results[n_chunks++] = (r0 + r2) + r1;
1195 template <
typename Operation,
typename Number>
1200 Number * outer_results,
1201 std::integral_constant<bool, true>)
1213 const size_type regular_chunks = vec_size / (32 * n_lanes);
1214 for (
size_type i = 0; i < regular_chunks; ++i)
1217 for (
unsigned int k = 0; k < 2; ++k)
1222 op.do_vectorized(
index + 2 * n_lanes);
1224 op.do_vectorized(
index + 3 * n_lanes);
1225 index += n_lanes * 4;
1228 r0 += op.do_vectorized(
index);
1229 r1 += op.do_vectorized(
index + n_lanes);
1230 r2 += op.do_vectorized(
index + 2 * n_lanes);
1231 r3 += op.do_vectorized(
index + 3 * n_lanes);
1233 r += (r0 + r1) + (r2 + r3);
1235 r.
store(&outer_results[i * n_lanes]);
1244 static_assert(n_lanes <= 16 && 16 % n_lanes == 0,
1245 "VectorizedArray::size() must be 1, 2, 4, 8, or 16");
1246 size_type n_chunks = regular_chunks * n_lanes;
1247 const size_type start_irregular = regular_chunks * n_lanes * 32;
1248 if (start_irregular < vec_size)
1252 const size_type remainder = vec_size - start_irregular;
1253 const size_type loop_length = remainder / (2 * n_lanes);
1254 for (
size_type j = 0; j < loop_length; ++j,
index += 2 * n_lanes)
1256 r0 += op.do_vectorized(
index);
1257 r1 += op.do_vectorized(
index + n_lanes);
1259 Number scalar_part = Number();
1260 size_type last = remainder % (2 * n_lanes);
1263 if (last >= n_lanes)
1265 r0 += op.do_vectorized(
index);
1269 for (
unsigned int i = 0; i < last; ++i)
1270 scalar_part += op(
index++);
1274 r0.
store(&outer_results[n_chunks]);
1275 outer_results[n_chunks] += scalar_part;
1279 n_chunks += n_lanes;
1290#ifdef DEAL_II_WITH_TBB
1319 template <
typename Operation,
typename ResultType>
1333 const unsigned int gs =
1368 for (
size_type i = range.begin(); i < range.end(); ++i)
1409 template <
typename Operation,
typename ResultType>
1415 const Operation &op,
1418 ResultType & result,
1419 const std::shared_ptr<::parallel::internal::TBBPartitioner>
1422#ifdef DEAL_II_WITH_TBB
1430 Assert(partitioner.get() !=
nullptr,
1432 "Unexpected initialization of Vector that does "
1433 "not set the TBB partitioner to a usable state."));
1434 std::shared_ptr<tbb::affinity_partitioner> tbb_partitioner =
1435 partitioner->acquire_one_partitioner();
1453 partitioner->release_one_partitioner(tbb_partitioner);
1454 result = generic_functor.
do_sum();
1465 template <
typename Number,
typename Number2,
typename MemorySpace>
1470 const std::shared_ptr<::parallel::internal::TBBPartitioner> &
1473 const ::MemorySpace::MemorySpaceData<Number2, MemorySpace>
1478 std::is_same<MemorySpace, ::MemorySpace::Default>::value &&
1479 std::is_same<Number, Number2>::value,
1480 "For the Default MemorySpace Number and Number2 should be the same type");
1485 const std::shared_ptr<::parallel::internal::TBBPartitioner> &
1494 const std::shared_ptr<::parallel::internal::TBBPartitioner> &
1497 const ::MemorySpace::MemorySpaceData<Number, MemorySpace>
1504 const std::shared_ptr<::parallel::internal::TBBPartitioner> &
1507 const ::MemorySpace::MemorySpaceData<Number, MemorySpace>
1514 const std::shared_ptr<::parallel::internal::TBBPartitioner> &
1523 const std::shared_ptr<::parallel::internal::TBBPartitioner> &
1527 const ::MemorySpace::MemorySpaceData<Number, MemorySpace>
1534 const std::shared_ptr<::parallel::internal::TBBPartitioner> &
1539 const ::MemorySpace::MemorySpaceData<Number, MemorySpace>
1541 const ::MemorySpace::MemorySpaceData<Number, MemorySpace>
1548 const std::shared_ptr<::parallel::internal::TBBPartitioner> &
1552 const ::MemorySpace::MemorySpaceData<Number, MemorySpace>
1559 const std::shared_ptr<::parallel::internal::TBBPartitioner> &
1564 const ::MemorySpace::MemorySpaceData<Number, MemorySpace>
1571 const std::shared_ptr<::parallel::internal::TBBPartitioner> &
1577 const ::MemorySpace::MemorySpaceData<Number, MemorySpace>
1579 const ::MemorySpace::MemorySpaceData<Number, MemorySpace>
1586 const std::shared_ptr<::parallel::internal::TBBPartitioner> &
1595 const std::shared_ptr<::parallel::internal::TBBPartitioner> &
1598 const ::MemorySpace::MemorySpaceData<Number, MemorySpace>
1605 const std::shared_ptr<::parallel::internal::TBBPartitioner> &
1609 const ::MemorySpace::MemorySpaceData<Number, MemorySpace>
1616 const std::shared_ptr<::parallel::internal::TBBPartitioner> &
1621 const ::MemorySpace::MemorySpaceData<Number, MemorySpace>
1623 const ::MemorySpace::MemorySpaceData<Number, MemorySpace>
1630 const std::shared_ptr<::parallel::internal::TBBPartitioner> &
1633 const ::MemorySpace::MemorySpaceData<Number2, MemorySpace>
1640 template <
typename real_type>
1643 const std::shared_ptr<::parallel::internal::TBBPartitioner> &
1647 const ::MemorySpace::MemorySpaceData<Number, MemorySpace>
1654 const std::shared_ptr<::parallel::internal::TBBPartitioner> &
1657 const ::MemorySpace::MemorySpaceData<Number, MemorySpace>
1663 template <
typename real_type>
1666 const std::shared_ptr<::parallel::internal::TBBPartitioner> &
1674 template <
typename real_type>
1677 const std::shared_ptr<::parallel::internal::TBBPartitioner> &
1687 const std::shared_ptr<::parallel::internal::TBBPartitioner> &
1691 const ::MemorySpace::MemorySpaceData<Number, MemorySpace>
1693 const ::MemorySpace::MemorySpaceData<Number, MemorySpace>
1700 template <
typename MemorySpace2>
1703 const std::shared_ptr<::parallel::internal::TBBPartitioner> &
1707 const ::MemorySpace::MemorySpaceData<Number, MemorySpace2>
1715 template <
typename Number,
typename Number2>
1719 copy(
const std::shared_ptr<::parallel::internal::TBBPartitioner>
1720 & thread_loop_partitioner,
1722 const ::MemorySpace::
1723 MemorySpaceData<Number2, ::
MemorySpace::Host> &v_data,
1729 data.values.data());
1730 parallel_for(copier, 0, size, thread_loop_partitioner);
1734 set(
const std::shared_ptr<::parallel::internal::TBBPartitioner>
1735 & thread_loop_partitioner,
1743 parallel_for(setter, 0, size, thread_loop_partitioner);
1748 const std::shared_ptr<::parallel::internal::TBBPartitioner>
1749 & thread_loop_partitioner,
1751 const ::MemorySpace::
1752 MemorySpaceData<Number, ::
MemorySpace::Host> &v_data,
1758 v_data.values.data());
1759 parallel_for(vector_add, 0, size, thread_loop_partitioner);
1764 const std::shared_ptr<::parallel::internal::TBBPartitioner>
1765 & thread_loop_partitioner,
1767 const ::MemorySpace::
1768 MemorySpaceData<Number, ::
MemorySpace::Host> &v_data,
1774 v_data.values.data());
1775 parallel_for(vector_subtract, 0, size, thread_loop_partitioner);
1780 const std::shared_ptr<::parallel::internal::TBBPartitioner>
1781 & thread_loop_partitioner,
1789 parallel_for(vector_add, 0, size, thread_loop_partitioner);
1793 add_av(
const std::shared_ptr<::parallel::internal::TBBPartitioner>
1794 & thread_loop_partitioner,
1797 const ::MemorySpace::
1798 MemorySpaceData<Number, ::
MemorySpace::Host> &v_data,
1804 v_data.values.data(),
1806 parallel_for(vector_add, 0, size, thread_loop_partitioner);
1811 const std::shared_ptr<::parallel::internal::TBBPartitioner>
1812 & thread_loop_partitioner,
1816 const ::MemorySpace::
1817 MemorySpaceData<Number, ::
MemorySpace::Host> &v_data,
1819 MemorySpaceData<Number, ::
MemorySpace::Host> &w_data,
1825 data.values.data(), v_data.values.data(), w_data.values.data(), a, b);
1826 parallel_for(vector_add, 0, size, thread_loop_partitioner);
1831 const std::shared_ptr<::parallel::internal::TBBPartitioner>
1832 & thread_loop_partitioner,
1835 const ::MemorySpace::
1836 MemorySpaceData<Number, ::
MemorySpace::Host> &v_data,
1842 v_data.values.data(),
1844 parallel_for(vector_sadd, 0, size, thread_loop_partitioner);
1849 const std::shared_ptr<::parallel::internal::TBBPartitioner>
1850 & thread_loop_partitioner,
1854 const ::MemorySpace::
1855 MemorySpaceData<Number, ::
MemorySpace::Host> &v_data,
1861 v_data.values.data(),
1864 parallel_for(vector_sadd, 0, size, thread_loop_partitioner);
1869 const std::shared_ptr<::parallel::internal::TBBPartitioner>
1870 & thread_loop_partitioner,
1875 const ::MemorySpace::
1876 MemorySpaceData<Number, ::
MemorySpace::Host> &v_data,
1878 MemorySpaceData<Number, ::
MemorySpace::Host> &w_data,
1884 v_data.values.data(),
1885 w_data.values.data(),
1889 parallel_for(vector_sadd, 0, size, thread_loop_partitioner);
1894 const std::shared_ptr<::parallel::internal::TBBPartitioner>
1895 & thread_loop_partitioner,
1897 const Number factor,
1903 data.values.data(), factor);
1904 parallel_for(vector_multiply, 0, size, thread_loop_partitioner);
1908 scale(
const std::shared_ptr<::parallel::internal::TBBPartitioner>
1909 & thread_loop_partitioner,
1911 const ::MemorySpace::
1912 MemorySpaceData<Number, ::
MemorySpace::Host> &v_data,
1918 v_data.values.data());
1919 parallel_for(vector_scale, 0, size, thread_loop_partitioner);
1923 equ_au(
const std::shared_ptr<::parallel::internal::TBBPartitioner>
1924 & thread_loop_partitioner,
1927 const ::MemorySpace::
1928 MemorySpaceData<Number, ::
MemorySpace::Host> &v_data,
1934 v_data.values.data(),
1936 parallel_for(vector_equ, 0, size, thread_loop_partitioner);
1941 const std::shared_ptr<::parallel::internal::TBBPartitioner>
1942 & thread_loop_partitioner,
1946 const ::MemorySpace::
1947 MemorySpaceData<Number, ::
MemorySpace::Host> &v_data,
1949 MemorySpaceData<Number, ::
MemorySpace::Host> &w_data,
1955 data.values.data(), v_data.values.data(), w_data.values.data(), a, b);
1956 parallel_for(vector_equ, 0, size, thread_loop_partitioner);
1960 dot(
const std::shared_ptr<::parallel::internal::TBBPartitioner>
1961 & thread_loop_partitioner,
1963 const ::MemorySpace::
1964 MemorySpaceData<Number2, ::
MemorySpace::Host> &v_data,
1971 data.values.data(), v_data.values.data());
1973 dot, 0, size, sum, thread_loop_partitioner);
1979 template <
typename real_type>
1981 norm_2(
const std::shared_ptr<::parallel::internal::TBBPartitioner>
1982 & thread_loop_partitioner,
1995 const std::shared_ptr<::parallel::internal::TBBPartitioner>
1996 & thread_loop_partitioner,
1998 const ::MemorySpace::
1999 MemorySpaceData<Number, ::
MemorySpace::Host> &data)
2008 template <
typename real_type>
2010 norm_1(
const std::shared_ptr<::parallel::internal::TBBPartitioner>
2011 & thread_loop_partitioner,
2022 template <
typename real_type>
2024 norm_p(
const std::shared_ptr<::parallel::internal::TBBPartitioner>
2025 & thread_loop_partitioner,
2039 const std::shared_ptr<::parallel::internal::TBBPartitioner>
2040 & thread_loop_partitioner,
2043 const ::MemorySpace::
2044 MemorySpaceData<Number, ::
MemorySpace::Host> &v_data,
2046 MemorySpaceData<Number, ::
MemorySpace::Host> &w_data,
2053 v_data.values.data(),
2054 w_data.values.data(),
2061 template <
typename MemorySpace2>
2064 const std::shared_ptr<::parallel::internal::TBBPartitioner>
2065 & thread_loop_partitioner,
2068 const ::MemorySpace::MemorySpaceData<Number, MemorySpace2>
2074 std::is_same<MemorySpace2, ::MemorySpace::Host>::value,
2079 copy(thread_loop_partitioner, size, v_data, data);
2083 add_vector(thread_loop_partitioner, size, v_data, data);
2091 template <
typename MemorySpace2>
2094 const std::shared_ptr<::parallel::internal::TBBPartitioner>
2098 const ::MemorySpace::MemorySpaceData<Number, MemorySpace2>
2104 std::is_same<MemorySpace2, ::MemorySpace::Default>::value,
2110 Kokkos::subview(data.values,
2111 Kokkos::pair<size_type, size_type>(0, size)),
2112 Kokkos::subview(v_data.values,
2113 Kokkos::pair<size_type, size_type>(0, size)));
2124 template <
typename Number>
2129 const std::shared_ptr<::parallel::internal::TBBPartitioner> &,
2131 const ::MemorySpace::
2132 MemorySpaceData<Number, ::
MemorySpace::Default> &v_data,
2138 Kokkos::subview(data.values,
2139 Kokkos::pair<size_type, size_type>(0, size)),
2140 Kokkos::subview(v_data.values,
2141 Kokkos::pair<size_type, size_type>(0, size)));
2145 set(
const std::shared_ptr<::parallel::internal::TBBPartitioner> &,
2153 Kokkos::subview(data.values,
2154 Kokkos::pair<size_type, size_type>(0, size)),
2160 const std::shared_ptr<::parallel::internal::TBBPartitioner> &,
2162 const ::MemorySpace::
2163 MemorySpaceData<Number, ::
MemorySpace::Default> &v_data,
2168 auto exec = typename ::MemorySpace::Default::kokkos_space::
2170 Kokkos::parallel_for(
2172 Kokkos::RangePolicy<
2173 ::MemorySpace::Default::kokkos_space::execution_space>(
2175 KOKKOS_LAMBDA(
int i) { data.values(i) += v_data.values(i); });
2181 const std::shared_ptr<::parallel::internal::TBBPartitioner> &,
2183 const ::MemorySpace::
2184 MemorySpaceData<Number, ::
MemorySpace::Default> &v_data,
2189 auto exec = typename ::MemorySpace::Default::kokkos_space::
2191 Kokkos::parallel_for(
2192 "::subtract_vector",
2193 Kokkos::RangePolicy<
2194 ::MemorySpace::Default::kokkos_space::execution_space>(
2196 KOKKOS_LAMBDA(
size_type i) { data.values(i) -= v_data.values(i); });
2202 const std::shared_ptr<::parallel::internal::TBBPartitioner> &,
2209 auto exec = typename ::MemorySpace::Default::kokkos_space::
2211 Kokkos::parallel_for(
2213 Kokkos::RangePolicy<
2214 ::MemorySpace::Default::kokkos_space::execution_space>(
2216 KOKKOS_LAMBDA(
size_type i) { data.values(i) += a; });
2222 const std::shared_ptr<::parallel::internal::TBBPartitioner> &,
2225 const ::MemorySpace::
2226 MemorySpaceData<Number, ::
MemorySpace::Default> &v_data,
2231 auto exec = typename ::MemorySpace::Default::kokkos_space::
2233 Kokkos::parallel_for(
2235 Kokkos::RangePolicy<
2236 ::MemorySpace::Default::kokkos_space::execution_space>(
2239 data.values(i) += a * v_data.values(i);
2246 const std::shared_ptr<::parallel::internal::TBBPartitioner> &,
2250 const ::MemorySpace::
2251 MemorySpaceData<Number, ::
MemorySpace::Default> &v_data,
2253 MemorySpaceData<Number, ::
MemorySpace::Default> &w_data,
2258 auto exec = typename ::MemorySpace::Default::kokkos_space::
2260 Kokkos::parallel_for(
2262 Kokkos::RangePolicy<
2263 ::MemorySpace::Default::kokkos_space::execution_space>(
2266 data.values(i) += a * v_data.values(i) + b * w_data.values(i);
2273 const std::shared_ptr<::parallel::internal::TBBPartitioner> &,
2276 const ::MemorySpace::
2277 MemorySpaceData<Number, ::
MemorySpace::Default> &v_data,
2282 auto exec = typename ::MemorySpace::Default::kokkos_space::
2284 Kokkos::parallel_for(
2286 Kokkos::RangePolicy<
2287 ::MemorySpace::Default::kokkos_space::execution_space>(
2290 data.values(i) = x * data.values(i) + v_data.values(i);
2297 const std::shared_ptr<::parallel::internal::TBBPartitioner> &,
2301 const ::MemorySpace::
2302 MemorySpaceData<Number, ::
MemorySpace::Default> &v_data,
2307 auto exec = typename ::MemorySpace::Default::kokkos_space::
2309 Kokkos::parallel_for(
2311 Kokkos::RangePolicy<
2312 ::MemorySpace::Default::kokkos_space::execution_space>(
2315 data.values(i) = x * data.values(i) + a * v_data.values(i);
2322 const std::shared_ptr<::parallel::internal::TBBPartitioner> &,
2327 const ::MemorySpace::
2328 MemorySpaceData<Number, ::
MemorySpace::Default> &v_data,
2330 MemorySpaceData<Number, ::
MemorySpace::Default> &w_data,
2335 auto exec = typename ::MemorySpace::Default::kokkos_space::
2337 Kokkos::parallel_for(
2339 Kokkos::RangePolicy<
2340 ::MemorySpace::Default::kokkos_space::execution_space>(
2344 x * data.values(i) + a * v_data.values(i) + b * w_data.values(i);
2351 const std::shared_ptr<::parallel::internal::TBBPartitioner> &,
2353 const Number factor,
2358 auto exec = typename ::MemorySpace::Default::kokkos_space::
2360 Kokkos::parallel_for(
2361 "::multiply_factor",
2362 Kokkos::RangePolicy<
2363 ::MemorySpace::Default::kokkos_space::execution_space>(
2365 KOKKOS_LAMBDA(
size_type i) { data.values(i) *= factor; });
2371 const std::shared_ptr<::parallel::internal::TBBPartitioner> &,
2373 const ::MemorySpace::
2374 MemorySpaceData<Number, ::
MemorySpace::Default> &v_data,
2379 auto exec = typename ::MemorySpace::Default::kokkos_space::
2381 Kokkos::parallel_for(
2383 Kokkos::RangePolicy<
2384 ::MemorySpace::Default::kokkos_space::execution_space>(
2386 KOKKOS_LAMBDA(
size_type i) { data.values(i) *= v_data.values(i); });
2392 const std::shared_ptr<::parallel::internal::TBBPartitioner> &,
2395 const ::MemorySpace::
2396 MemorySpaceData<Number, ::
MemorySpace::Default> &v_data,
2401 auto exec = typename ::MemorySpace::Default::kokkos_space::
2403 Kokkos::parallel_for(
2405 Kokkos::RangePolicy<
2406 ::MemorySpace::Default::kokkos_space::execution_space>(
2409 data.values(i) = a * v_data.values(i);
2416 const std::shared_ptr<::parallel::internal::TBBPartitioner> &,
2420 const ::MemorySpace::
2421 MemorySpaceData<Number, ::
MemorySpace::Default> &v_data,
2423 MemorySpaceData<Number, ::
MemorySpace::Default> &w_data,
2428 auto exec = typename ::MemorySpace::Default::kokkos_space::
2430 Kokkos::parallel_for(
2432 Kokkos::RangePolicy<
2433 ::MemorySpace::Default::kokkos_space::execution_space>(
2436 data.values(i) = a * v_data.values(i) + b * w_data.values(i);
2442 dot(
const std::shared_ptr<::parallel::internal::TBBPartitioner> &,
2444 const ::MemorySpace::
2445 MemorySpaceData<Number, ::
MemorySpace::Default> &v_data,
2452 auto exec = typename ::MemorySpace::Default::kokkos_space::
2454 Kokkos::parallel_reduce(
2456 Kokkos::RangePolicy<
2457 ::MemorySpace::Default::kokkos_space::execution_space>(
2459 KOKKOS_LAMBDA(
size_type i, Number & update) {
2460 update += data.values(i) * v_data.values(i);
2468 template <
typename real_type>
2470 norm_2(
const std::shared_ptr<::parallel::internal::TBBPartitioner>
2471 & thread_loop_partitioner,
2475 MemorySpaceData<Number, ::
MemorySpace::Default> &data)
2477 sum =
dot(thread_loop_partitioner, size, data, data);
2482 const std::shared_ptr<::parallel::internal::TBBPartitioner> &,
2484 const ::MemorySpace::
2485 MemorySpaceData<Number, ::
MemorySpace::Default> &data)
2489 auto exec = typename ::MemorySpace::Default::kokkos_space::
2491 Kokkos::parallel_reduce(
2493 Kokkos::RangePolicy<
2494 ::MemorySpace::Default::kokkos_space::execution_space>(
2496 KOKKOS_LAMBDA(
size_type i, Number & update) {
2497 update += data.values(i);
2505 template <
typename real_type>
2508 const std::shared_ptr<::parallel::internal::TBBPartitioner> &,
2515 auto exec = typename ::MemorySpace::Default::kokkos_space::
2517 Kokkos::parallel_reduce(
2519 Kokkos::RangePolicy<
2520 ::MemorySpace::Default::kokkos_space::execution_space>(
2522 KOKKOS_LAMBDA(
size_type i, Number & update) {
2523#if KOKKOS_VERSION < 30400
2524 update +=
std::abs(data.values(i));
2525#elif KOKKOS_VERSION < 30700
2526 update += Kokkos::Experimental::fabs(data.values(i));
2528 update += Kokkos::abs(data.values(i));
2534 template <
typename real_type>
2537 const std::shared_ptr<::parallel::internal::TBBPartitioner> &,
2545 auto exec = typename ::MemorySpace::Default::kokkos_space::
2547 Kokkos::parallel_reduce(
2549 Kokkos::RangePolicy<
2550 ::MemorySpace::Default::kokkos_space::execution_space>(
2552 KOKKOS_LAMBDA(
size_type i, Number & update) {
2553#if KOKKOS_VERSION < 30400
2554 update +=
std::pow(fabs(data.values(i)), exp);
2555#elif KOKKOS_VERSION < 30700
2556 update += Kokkos::Experimental::pow(
2557 Kokkos::Experimental::fabs(data.values(i)), exp);
2559 update += Kokkos::pow(Kokkos::abs(data.values(i)), exp);
2567 const std::shared_ptr<::parallel::internal::TBBPartitioner> &,
2570 const ::MemorySpace::
2571 MemorySpaceData<Number, ::
MemorySpace::Default> &v_data,
2573 MemorySpaceData<Number, ::
MemorySpace::Default> &w_data,
2580 auto exec = typename ::MemorySpace::Default::kokkos_space::
2582 Kokkos::parallel_reduce(
2584 Kokkos::RangePolicy<
2585 ::MemorySpace::Default::kokkos_space::execution_space>(
2587 KOKKOS_LAMBDA(
size_type i, Number & update) {
2588 data.values(i) += a * v_data.values(i);
2598 template <
typename MemorySpace2>
2601 const std::shared_ptr<::parallel::internal::TBBPartitioner>
2602 & thread_loop_partitioner,
2605 const ::MemorySpace::MemorySpaceData<Number, MemorySpace2>
2611 std::is_same<MemorySpace2, ::MemorySpace::Default>::value,
2616 copy(thread_loop_partitioner, size, v_data, data);
2620 add_vector(thread_loop_partitioner, size, v_data, data);
2628 template <
typename MemorySpace2>
2631 const std::shared_ptr<::parallel::internal::TBBPartitioner>
2635 const ::MemorySpace::MemorySpaceData<Number, MemorySpace2>
2641 std::is_same<MemorySpace2, ::MemorySpace::Host>::value,
2647 Kokkos::subview(data.values,
2648 Kokkos::pair<size_type, size_type>(0, size)),
2649 Kokkos::subview(v_data.values,
2650 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_CONSTEXPR_IN_CONDITIONAL
#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)
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)
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
size_type do_accumulate(const Operation op, const size_type vec_size, const size_type start_index, ResultType *outer_results, std::integral_constant< bool, false >)
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 > &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< MemorySpace2, ::MemorySpace::Host >::value, 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 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< MemorySpace2, ::MemorySpace::Default >::value, int >=0)
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 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 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< MemorySpace2, ::MemorySpace::Default >::value, int >=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< MemorySpace2, ::MemorySpace::Host >::value, 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 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)