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())
213 std::fill(
dst + begin,
dst + end, Number());
222 template <
typename Number,
typename OtherNumber>
238 if constexpr (std::is_trivially_copyable<Number>() &&
239 std::is_same_v<Number, OtherNumber>)
240 std::memcpy(
dst + begin,
src + begin, (end - begin) *
sizeof(Number));
249 const OtherNumber *
const src;
253 template <
typename Number>
285 template <
typename Number>
289 const Number *
const v_val,
320 template <
typename Number>
324 const Number *
const v_val,
359 template <
typename Number>
387 template <
typename Number>
417 template <
typename Number>
445 template <
typename Number>
449 const Number *
const v_val,
450 const Number *
const w_val,
485 template <
typename Number>
489 const Number *
const v_val,
519 template <
typename Number>
562 template <
typename Number>
590 template <
typename Number>
594 const Number *
const u_val,
624 template <
typename Number>
628 const Number *
const u_val,
629 const Number *
const v_val,
664 template <
typename Number>
710 template <
typename Number>
747 template <
typename Number,
typename Number2>
750 static constexpr bool vectorizes = std::is_same_v<Number, Number2> &&
753 Dot(
const Number *
const X,
const Number2 *
const Y)
779 "This operation is not correctly implemented for "
780 "complex-valued objects.");
784 const Number *
const X;
785 const Number2 *
const Y;
788 template <
typename Number,
typename RealType>
811 const Number *
const X;
814 template <
typename Number,
typename RealType>
840 template <
typename Number,
typename RealType>
868 template <
typename Number>
894 template <
typename Number>
900 const Number *
const V,
901 const Number *
const W,
936 "This operation is not correctly implemented for "
937 "complex-valued objects.");
942 const Number *
const V;
943 const Number *
const W;
991 template <
typename Operation,
typename ResultType>
1000 result = ResultType();
1023 std::bool_constant<Operation::vectorizes>());
1032 for (; j + 2 * n_lanes - 1 < n_chunks;
1033 j += 2 * n_lanes, n_chunks += n_lanes)
1036 a.
load(outer_results + j);
1037 b.load(outer_results + j + n_lanes);
1039 a.
store(outer_results + n_chunks);
1044 if (Operation::vectorizes)
1049 ResultType *result_ptr = outer_results + j;
1051 for (
unsigned int i = 0; i < 8; ++i)
1052 result_ptr[i] = result_ptr[i] + result_ptr[i + 8];
1054 for (
unsigned int i = 0; i < 4; ++i)
1055 result_ptr[i] = result_ptr[i] + result_ptr[i + 4];
1057 for (
unsigned int i = 0; i < 2; ++i)
1058 result_ptr[i] = result_ptr[i] + result_ptr[i + 2];
1059 result = result_ptr[0] + result_ptr[1];
1066 for (; j + 1 < n_chunks; j += 2, ++n_chunks)
1067 outer_results[n_chunks] =
1068 outer_results[j] + outer_results[j + 1];
1073 result = outer_results[n_chunks - 1];
1085 ResultType r0, r1, r2, r3;
1089 first + 2 * new_size,
1090 first + 3 * new_size,
1093 result = (r0 + r1) + (r2 + r3);
1105 template <
typename Operation,
typename ResultType>
1110 ResultType *outer_results,
1111 std::bool_constant<false>)
1119 for (
size_type i = 0; i < n_chunks; ++i)
1122 for (
unsigned int k = 0; k < 2; ++k)
1124 ResultType r0 = op(
index);
1125 ResultType r1 = op(
index + 1);
1126 ResultType r2 = op(
index + 2);
1127 ResultType r3 = op(
index + 3);
1132 r1 += op(
index + 1);
1133 r2 += op(
index + 2);
1134 r3 += op(
index + 3);
1136 r += (r0 + r1) + (r2 + r3);
1138 outer_results[i] = r;
1141 if (n_chunks * 32 < vec_size)
1143 const size_type remainder = vec_size - n_chunks * 32;
1144 const size_type inner_chunks = remainder / 8;
1145 const size_type remainder_inner = remainder % 8;
1146 ResultType r0 = ResultType(), r1 = ResultType(), r2 = ResultType();
1147 switch (inner_chunks)
1166 for (
size_type j = 0; j < remainder_inner; ++j)
1168 outer_results[n_chunks++] = (r0 + r2) + r1;
1187 template <
typename Operation,
typename Number>
1192 Number *outer_results,
1193 std::bool_constant<true>)
1205 const size_type regular_chunks = vec_size / (32 * n_lanes);
1206 for (
size_type i = 0; i < regular_chunks; ++i)
1209 for (
unsigned int k = 0; k < 2; ++k)
1214 op.do_vectorized(
index + 2 * n_lanes);
1216 op.do_vectorized(
index + 3 * n_lanes);
1217 index += n_lanes * 4;
1220 r0 += op.do_vectorized(
index);
1221 r1 += op.do_vectorized(
index + n_lanes);
1222 r2 += op.do_vectorized(
index + 2 * n_lanes);
1223 r3 += op.do_vectorized(
index + 3 * n_lanes);
1225 r += (r0 + r1) + (r2 + r3);
1227 r.
store(&outer_results[i * n_lanes]);
1236 static_assert(n_lanes <= 16 && 16 % n_lanes == 0,
1237 "VectorizedArray::size() must be 1, 2, 4, 8, or 16");
1238 size_type n_chunks = regular_chunks * n_lanes;
1239 const size_type start_irregular = regular_chunks * n_lanes * 32;
1240 if (start_irregular < vec_size)
1244 const size_type remainder = vec_size - start_irregular;
1245 const size_type loop_length = remainder / (2 * n_lanes);
1246 for (
size_type j = 0; j < loop_length; ++j,
index += 2 * n_lanes)
1248 r0 += op.do_vectorized(
index);
1249 r1 += op.do_vectorized(
index + n_lanes);
1251 Number scalar_part = Number();
1252 size_type last = remainder % (2 * n_lanes);
1255 if (last >= n_lanes)
1257 r0 += op.do_vectorized(
index);
1261 for (
unsigned int i = 0; i < last; ++i)
1262 scalar_part += op(
index++);
1266 r0.
store(&outer_results[n_chunks]);
1267 outer_results[n_chunks] += scalar_part;
1271 n_chunks += n_lanes;
1282#ifdef DEAL_II_WITH_TBB
1311 template <
typename Operation,
typename ResultType>
1325 const unsigned int gs =
1360 for (
size_type i = range.begin(); i < range.end(); ++i)
1401 template <
typename Operation,
typename ResultType>
1407 const Operation &op,
1411 const std::shared_ptr<::parallel::internal::TBBPartitioner>
1414#ifdef DEAL_II_WITH_TBB
1422 Assert(partitioner.get() !=
nullptr,
1424 "Unexpected initialization of Vector that does "
1425 "not set the TBB partitioner to a usable state."));
1426 std::shared_ptr<tbb::affinity_partitioner> tbb_partitioner =
1427 partitioner->acquire_one_partitioner();
1445 partitioner->release_one_partitioner(tbb_partitioner);
1446 result = generic_functor.
do_sum();
1457 template <
typename Number,
typename Number2,
typename MemorySpace>
1462 const std::shared_ptr<::parallel::internal::TBBPartitioner> &
1465 const ::MemorySpace::MemorySpaceData<Number2, MemorySpace>
1470 std::is_same_v<MemorySpace, ::MemorySpace::Default> &&
1471 std::is_same_v<Number, Number2>,
1472 "For the Default MemorySpace Number and Number2 should be the same type");
1477 const std::shared_ptr<::parallel::internal::TBBPartitioner> &
1486 const std::shared_ptr<::parallel::internal::TBBPartitioner> &
1489 const ::MemorySpace::MemorySpaceData<Number, MemorySpace>
1496 const std::shared_ptr<::parallel::internal::TBBPartitioner> &
1499 const ::MemorySpace::MemorySpaceData<Number, MemorySpace>
1506 const std::shared_ptr<::parallel::internal::TBBPartitioner> &
1515 const std::shared_ptr<::parallel::internal::TBBPartitioner> &
1519 const ::MemorySpace::MemorySpaceData<Number, MemorySpace>
1526 const std::shared_ptr<::parallel::internal::TBBPartitioner> &
1531 const ::MemorySpace::MemorySpaceData<Number, MemorySpace>
1533 const ::MemorySpace::MemorySpaceData<Number, MemorySpace>
1540 const std::shared_ptr<::parallel::internal::TBBPartitioner> &
1544 const ::MemorySpace::MemorySpaceData<Number, MemorySpace>
1551 const std::shared_ptr<::parallel::internal::TBBPartitioner> &
1556 const ::MemorySpace::MemorySpaceData<Number, MemorySpace>
1563 const std::shared_ptr<::parallel::internal::TBBPartitioner> &
1569 const ::MemorySpace::MemorySpaceData<Number, MemorySpace>
1571 const ::MemorySpace::MemorySpaceData<Number, MemorySpace>
1578 const std::shared_ptr<::parallel::internal::TBBPartitioner> &
1587 const std::shared_ptr<::parallel::internal::TBBPartitioner> &
1590 const ::MemorySpace::MemorySpaceData<Number, MemorySpace>
1597 const std::shared_ptr<::parallel::internal::TBBPartitioner> &
1601 const ::MemorySpace::MemorySpaceData<Number, MemorySpace>
1608 const std::shared_ptr<::parallel::internal::TBBPartitioner> &
1613 const ::MemorySpace::MemorySpaceData<Number, MemorySpace>
1615 const ::MemorySpace::MemorySpaceData<Number, MemorySpace>
1622 const std::shared_ptr<::parallel::internal::TBBPartitioner> &
1625 const ::MemorySpace::MemorySpaceData<Number2, MemorySpace>
1632 template <
typename real_type>
1635 const std::shared_ptr<::parallel::internal::TBBPartitioner> &
1639 const ::MemorySpace::MemorySpaceData<Number, MemorySpace>
1646 const std::shared_ptr<::parallel::internal::TBBPartitioner> &
1649 const ::MemorySpace::MemorySpaceData<Number, MemorySpace>
1655 template <
typename real_type>
1658 const std::shared_ptr<::parallel::internal::TBBPartitioner> &
1666 template <
typename real_type>
1669 const std::shared_ptr<::parallel::internal::TBBPartitioner> &
1679 const std::shared_ptr<::parallel::internal::TBBPartitioner> &
1683 const ::MemorySpace::MemorySpaceData<Number, MemorySpace>
1685 const ::MemorySpace::MemorySpaceData<Number, MemorySpace>
1692 template <
typename MemorySpace2>
1695 const std::shared_ptr<::parallel::internal::TBBPartitioner> &
1699 const ::MemorySpace::MemorySpaceData<Number, MemorySpace2>
1707 template <
typename Number,
typename Number2>
1711 copy(
const std::shared_ptr<::parallel::internal::TBBPartitioner>
1712 &thread_loop_partitioner,
1714 const ::MemorySpace::
1715 MemorySpaceData<Number2, ::
MemorySpace::Host> &v_data,
1721 data.values.data());
1726 set(
const std::shared_ptr<::parallel::internal::TBBPartitioner>
1727 &thread_loop_partitioner,
1740 const std::shared_ptr<::parallel::internal::TBBPartitioner>
1741 &thread_loop_partitioner,
1743 const ::MemorySpace::
1744 MemorySpaceData<Number, ::
MemorySpace::Host> &v_data,
1750 v_data.values.data());
1756 const std::shared_ptr<::parallel::internal::TBBPartitioner>
1757 &thread_loop_partitioner,
1759 const ::MemorySpace::
1760 MemorySpaceData<Number, ::
MemorySpace::Host> &v_data,
1766 v_data.values.data());
1772 const std::shared_ptr<::parallel::internal::TBBPartitioner>
1773 &thread_loop_partitioner,
1785 add_av(
const std::shared_ptr<::parallel::internal::TBBPartitioner>
1786 &thread_loop_partitioner,
1789 const ::MemorySpace::
1790 MemorySpaceData<Number, ::
MemorySpace::Host> &v_data,
1796 v_data.values.data(),
1803 const std::shared_ptr<::parallel::internal::TBBPartitioner>
1804 &thread_loop_partitioner,
1808 const ::MemorySpace::
1809 MemorySpaceData<Number, ::
MemorySpace::Host> &v_data,
1811 MemorySpaceData<Number, ::
MemorySpace::Host> &w_data,
1817 data.values.data(), v_data.values.data(), w_data.values.data(), a, b);
1823 const std::shared_ptr<::parallel::internal::TBBPartitioner>
1824 &thread_loop_partitioner,
1827 const ::MemorySpace::
1828 MemorySpaceData<Number, ::
MemorySpace::Host> &v_data,
1834 v_data.values.data(),
1841 const std::shared_ptr<::parallel::internal::TBBPartitioner>
1842 &thread_loop_partitioner,
1846 const ::MemorySpace::
1847 MemorySpaceData<Number, ::
MemorySpace::Host> &v_data,
1853 v_data.values.data(),
1861 const std::shared_ptr<::parallel::internal::TBBPartitioner>
1862 &thread_loop_partitioner,
1867 const ::MemorySpace::
1868 MemorySpaceData<Number, ::
MemorySpace::Host> &v_data,
1870 MemorySpaceData<Number, ::
MemorySpace::Host> &w_data,
1876 v_data.values.data(),
1877 w_data.values.data(),
1886 const std::shared_ptr<::parallel::internal::TBBPartitioner>
1887 &thread_loop_partitioner,
1889 const Number factor,
1895 data.values.data(), factor);
1900 scale(
const std::shared_ptr<::parallel::internal::TBBPartitioner>
1901 &thread_loop_partitioner,
1903 const ::MemorySpace::
1904 MemorySpaceData<Number, ::
MemorySpace::Host> &v_data,
1910 v_data.values.data());
1915 equ_au(
const std::shared_ptr<::parallel::internal::TBBPartitioner>
1916 &thread_loop_partitioner,
1919 const ::MemorySpace::
1920 MemorySpaceData<Number, ::
MemorySpace::Host> &v_data,
1926 v_data.values.data(),
1933 const std::shared_ptr<::parallel::internal::TBBPartitioner>
1934 &thread_loop_partitioner,
1938 const ::MemorySpace::
1939 MemorySpaceData<Number, ::
MemorySpace::Host> &v_data,
1941 MemorySpaceData<Number, ::
MemorySpace::Host> &w_data,
1947 data.values.data(), v_data.values.data(), w_data.values.data(), a, b);
1952 dot(
const std::shared_ptr<::parallel::internal::TBBPartitioner>
1953 &thread_loop_partitioner,
1955 const ::MemorySpace::
1956 MemorySpaceData<Number2, ::
MemorySpace::Host> &v_data,
1963 data.values.data(), v_data.values.data());
1965 dot, 0,
size, sum, thread_loop_partitioner);
1971 template <
typename real_type>
1973 norm_2(
const std::shared_ptr<::parallel::internal::TBBPartitioner>
1974 &thread_loop_partitioner,
1987 const std::shared_ptr<::parallel::internal::TBBPartitioner>
1988 &thread_loop_partitioner,
1990 const ::MemorySpace::
2000 template <
typename real_type>
2002 norm_1(
const std::shared_ptr<::parallel::internal::TBBPartitioner>
2003 &thread_loop_partitioner,
2014 template <
typename real_type>
2016 norm_p(
const std::shared_ptr<::parallel::internal::TBBPartitioner>
2017 &thread_loop_partitioner,
2031 const std::shared_ptr<::parallel::internal::TBBPartitioner>
2032 &thread_loop_partitioner,
2035 const ::MemorySpace::
2036 MemorySpaceData<Number, ::
MemorySpace::Host> &v_data,
2038 MemorySpaceData<Number, ::
MemorySpace::Host> &w_data,
2045 v_data.values.data(),
2046 w_data.values.data(),
2053 template <
typename MemorySpace2>
2056 const std::shared_ptr<::parallel::internal::TBBPartitioner>
2057 &thread_loop_partitioner,
2060 const ::MemorySpace::MemorySpaceData<Number, MemorySpace2>
2066 std::is_same_v<MemorySpace2, ::MemorySpace::Host>,
2083 template <
typename MemorySpace2>
2086 const std::shared_ptr<::parallel::internal::TBBPartitioner>
2090 const ::MemorySpace::MemorySpaceData<Number, MemorySpace2>
2096 std::is_same_v<MemorySpace2, ::MemorySpace::Default>,
2102 Kokkos::subview(
data.values,
2103 Kokkos::pair<size_type, size_type>(0,
size)),
2104 Kokkos::subview(v_data.values,
2105 Kokkos::pair<size_type, size_type>(0,
size)));
2116 template <
typename Number>
2121 const std::shared_ptr<::parallel::internal::TBBPartitioner> &,
2123 const ::MemorySpace::
2124 MemorySpaceData<Number, ::
MemorySpace::Default> &v_data,
2130 Kokkos::subview(
data.values,
2131 Kokkos::pair<size_type, size_type>(0,
size)),
2132 Kokkos::subview(v_data.values,
2133 Kokkos::pair<size_type, size_type>(0,
size)));
2137 set(
const std::shared_ptr<::parallel::internal::TBBPartitioner> &,
2145 Kokkos::subview(
data.values,
2146 Kokkos::pair<size_type, size_type>(0,
size)),
2152 const std::shared_ptr<::parallel::internal::TBBPartitioner> &,
2154 const ::MemorySpace::
2155 MemorySpaceData<Number, ::
MemorySpace::Default> &v_data,
2160 auto exec = typename ::MemorySpace::Default::kokkos_space::
2162 Kokkos::parallel_for(
2164 Kokkos::RangePolicy<
2165 ::MemorySpace::Default::kokkos_space::execution_space>(
2167 KOKKOS_LAMBDA(
int i) {
data.values(i) += v_data.values(i); });
2173 const std::shared_ptr<::parallel::internal::TBBPartitioner> &,
2175 const ::MemorySpace::
2176 MemorySpaceData<Number, ::
MemorySpace::Default> &v_data,
2181 auto exec = typename ::MemorySpace::Default::kokkos_space::
2183 Kokkos::parallel_for(
2184 "::subtract_vector",
2185 Kokkos::RangePolicy<
2186 ::MemorySpace::Default::kokkos_space::execution_space>(
2188 KOKKOS_LAMBDA(
size_type i) {
data.values(i) -= v_data.values(i); });
2194 const std::shared_ptr<::parallel::internal::TBBPartitioner> &,
2201 auto exec = typename ::MemorySpace::Default::kokkos_space::
2203 Kokkos::parallel_for(
2205 Kokkos::RangePolicy<
2206 ::MemorySpace::Default::kokkos_space::execution_space>(
2214 const std::shared_ptr<::parallel::internal::TBBPartitioner> &,
2217 const ::MemorySpace::
2218 MemorySpaceData<Number, ::
MemorySpace::Default> &v_data,
2223 auto exec = typename ::MemorySpace::Default::kokkos_space::
2225 Kokkos::parallel_for(
2227 Kokkos::RangePolicy<
2228 ::MemorySpace::Default::kokkos_space::execution_space>(
2231 data.values(i) += a * v_data.values(i);
2238 const std::shared_ptr<::parallel::internal::TBBPartitioner> &,
2242 const ::MemorySpace::
2243 MemorySpaceData<Number, ::
MemorySpace::Default> &v_data,
2245 MemorySpaceData<Number, ::
MemorySpace::Default> &w_data,
2250 auto exec = typename ::MemorySpace::Default::kokkos_space::
2252 Kokkos::parallel_for(
2254 Kokkos::RangePolicy<
2255 ::MemorySpace::Default::kokkos_space::execution_space>(
2258 data.values(i) += a * v_data.values(i) + b * w_data.values(i);
2265 const std::shared_ptr<::parallel::internal::TBBPartitioner> &,
2268 const ::MemorySpace::
2269 MemorySpaceData<Number, ::
MemorySpace::Default> &v_data,
2274 auto exec = typename ::MemorySpace::Default::kokkos_space::
2276 Kokkos::parallel_for(
2278 Kokkos::RangePolicy<
2279 ::MemorySpace::Default::kokkos_space::execution_space>(
2282 data.values(i) = x *
data.values(i) + v_data.values(i);
2289 const std::shared_ptr<::parallel::internal::TBBPartitioner> &,
2293 const ::MemorySpace::
2294 MemorySpaceData<Number, ::
MemorySpace::Default> &v_data,
2299 auto exec = typename ::MemorySpace::Default::kokkos_space::
2301 Kokkos::parallel_for(
2303 Kokkos::RangePolicy<
2304 ::MemorySpace::Default::kokkos_space::execution_space>(
2307 data.values(i) = x *
data.values(i) + a * v_data.values(i);
2314 const std::shared_ptr<::parallel::internal::TBBPartitioner> &,
2319 const ::MemorySpace::
2320 MemorySpaceData<Number, ::
MemorySpace::Default> &v_data,
2322 MemorySpaceData<Number, ::
MemorySpace::Default> &w_data,
2327 auto exec = typename ::MemorySpace::Default::kokkos_space::
2329 Kokkos::parallel_for(
2331 Kokkos::RangePolicy<
2332 ::MemorySpace::Default::kokkos_space::execution_space>(
2336 x *
data.values(i) + a * v_data.values(i) + b * w_data.values(i);
2343 const std::shared_ptr<::parallel::internal::TBBPartitioner> &,
2345 const Number factor,
2350 auto exec = typename ::MemorySpace::Default::kokkos_space::
2352 Kokkos::parallel_for(
2353 "::multiply_factor",
2354 Kokkos::RangePolicy<
2355 ::MemorySpace::Default::kokkos_space::execution_space>(
2363 const std::shared_ptr<::parallel::internal::TBBPartitioner> &,
2365 const ::MemorySpace::
2366 MemorySpaceData<Number, ::
MemorySpace::Default> &v_data,
2371 auto exec = typename ::MemorySpace::Default::kokkos_space::
2373 Kokkos::parallel_for(
2375 Kokkos::RangePolicy<
2376 ::MemorySpace::Default::kokkos_space::execution_space>(
2378 KOKKOS_LAMBDA(
size_type i) {
data.values(i) *= v_data.values(i); });
2384 const std::shared_ptr<::parallel::internal::TBBPartitioner> &,
2387 const ::MemorySpace::
2388 MemorySpaceData<Number, ::
MemorySpace::Default> &v_data,
2393 auto exec = typename ::MemorySpace::Default::kokkos_space::
2395 Kokkos::parallel_for(
2397 Kokkos::RangePolicy<
2398 ::MemorySpace::Default::kokkos_space::execution_space>(
2401 data.values(i) = a * v_data.values(i);
2408 const std::shared_ptr<::parallel::internal::TBBPartitioner> &,
2412 const ::MemorySpace::
2413 MemorySpaceData<Number, ::
MemorySpace::Default> &v_data,
2415 MemorySpaceData<Number, ::
MemorySpace::Default> &w_data,
2420 auto exec = typename ::MemorySpace::Default::kokkos_space::
2422 Kokkos::parallel_for(
2424 Kokkos::RangePolicy<
2425 ::MemorySpace::Default::kokkos_space::execution_space>(
2428 data.values(i) = a * v_data.values(i) + b * w_data.values(i);
2434 dot(
const std::shared_ptr<::parallel::internal::TBBPartitioner> &,
2436 const ::MemorySpace::
2437 MemorySpaceData<Number, ::
MemorySpace::Default> &v_data,
2444 auto exec = typename ::MemorySpace::Default::kokkos_space::
2446 Kokkos::parallel_reduce(
2448 Kokkos::RangePolicy<
2449 ::MemorySpace::Default::kokkos_space::execution_space>(
2451 KOKKOS_LAMBDA(
size_type i, Number & update) {
2452 update +=
data.values(i) * v_data.values(i);
2460 template <
typename real_type>
2462 norm_2(
const std::shared_ptr<::parallel::internal::TBBPartitioner>
2463 &thread_loop_partitioner,
2474 const std::shared_ptr<::parallel::internal::TBBPartitioner> &,
2476 const ::MemorySpace::
2481 auto exec = typename ::MemorySpace::Default::kokkos_space::
2483 Kokkos::parallel_reduce(
2485 Kokkos::RangePolicy<
2486 ::MemorySpace::Default::kokkos_space::execution_space>(
2488 KOKKOS_LAMBDA(
size_type i, Number & update) {
2489 update +=
data.values(i);
2497 template <
typename real_type>
2500 const std::shared_ptr<::parallel::internal::TBBPartitioner> &,
2507 auto exec = typename ::MemorySpace::Default::kokkos_space::
2509 Kokkos::parallel_reduce(
2511 Kokkos::RangePolicy<
2512 ::MemorySpace::Default::kokkos_space::execution_space>(
2514 KOKKOS_LAMBDA(
size_type i, Number & update) {
2515#if KOKKOS_VERSION < 30400
2517#elif KOKKOS_VERSION < 30700
2518 update += Kokkos::Experimental::fabs(
data.values(i));
2520 update += Kokkos::abs(
data.values(i));
2526 template <
typename real_type>
2529 const std::shared_ptr<::parallel::internal::TBBPartitioner> &,
2537 auto exec = typename ::MemorySpace::Default::kokkos_space::
2539 Kokkos::parallel_reduce(
2541 Kokkos::RangePolicy<
2542 ::MemorySpace::Default::kokkos_space::execution_space>(
2544 KOKKOS_LAMBDA(
size_type i, Number & update) {
2545#if KOKKOS_VERSION < 30400
2547#elif KOKKOS_VERSION < 30700
2548 update += Kokkos::Experimental::pow(
2549 Kokkos::Experimental::fabs(
data.values(i)), exp);
2551 update += Kokkos::pow(Kokkos::abs(
data.values(i)), exp);
2559 const std::shared_ptr<::parallel::internal::TBBPartitioner> &,
2562 const ::MemorySpace::
2563 MemorySpaceData<Number, ::
MemorySpace::Default> &v_data,
2565 MemorySpaceData<Number, ::
MemorySpace::Default> &w_data,
2572 auto exec = typename ::MemorySpace::Default::kokkos_space::
2574 Kokkos::parallel_reduce(
2576 Kokkos::RangePolicy<
2577 ::MemorySpace::Default::kokkos_space::execution_space>(
2579 KOKKOS_LAMBDA(
size_type i, Number & update) {
2580 data.values(i) += a * v_data.values(i);
2590 template <
typename MemorySpace2>
2593 const std::shared_ptr<::parallel::internal::TBBPartitioner>
2594 &thread_loop_partitioner,
2597 const ::MemorySpace::MemorySpaceData<Number, MemorySpace2>
2603 std::is_same_v<MemorySpace2, ::MemorySpace::Default>,
2620 template <
typename MemorySpace2>
2623 const std::shared_ptr<::parallel::internal::TBBPartitioner>
2627 const ::MemorySpace::MemorySpaceData<Number, MemorySpace2>
2633 std::is_same_v<MemorySpace2, ::MemorySpace::Host>,
2639 Kokkos::subview(
data.values,
2640 Kokkos::pair<size_type, size_type>(0,
size)),
2641 Kokkos::subview(v_data.values,
2642 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)