14#ifndef dealii_vector_operations_internal_h
15#define dealii_vector_operations_internal_h
28#include <Kokkos_Core.hpp>
33#ifdef DEAL_II_WITH_TBB
34# include <tbb/blocked_range.h>
35# include <tbb/partitioner.h>
43 namespace VectorOperations
69 template <
typename T,
typename U>
76 template <
typename T,
typename U>
79 const std::complex<T> *
end,
80 std::complex<U> *dest)
85 template <
typename T,
typename U>
87 copy(
const std::complex<T> *,
const std::complex<T> *, U *)
90 ExcMessage(
"Can't convert a vector of complex numbers "
91 "into a vector of reals/doubles"));
96#ifdef DEAL_II_WITH_TBB
105 template <
typename Functor>
117 const unsigned int gs =
151 template <
typename Functor>
157 const std::shared_ptr<::parallel::internal::TBBPartitioner>
160#ifdef DEAL_II_WITH_TBB
168 Assert(partitioner.get() !=
nullptr,
170 "Unexpected initialization of Vector that does "
171 "not set the TBB partitioner to a usable state."));
172 std::shared_ptr<tbb::affinity_partitioner> tbb_partitioner =
173 partitioner->acquire_one_partitioner();
189 partitioner->release_one_partitioner(tbb_partitioner);
191 else if (vec_size > 0)
203 template <
typename Number>
218 if (
value == Number())
228 template <
typename Number,
typename OtherNumber>
244 if constexpr (std::is_trivially_copyable<Number>() &&
245 std::is_same_v<Number, OtherNumber>)
255 const OtherNumber *
const src;
259 template <
typename Number>
291 template <
typename Number>
295 const Number *
const v_val,
326 template <
typename Number>
330 const Number *
const v_val,
365 template <
typename Number>
393 template <
typename Number>
423 template <
typename Number>
451 template <
typename Number>
455 const Number *
const v_val,
456 const Number *
const w_val,
491 template <
typename Number>
495 const Number *
const v_val,
525 template <
typename Number>
568 template <
typename Number>
596 template <
typename Number>
600 const Number *
const u_val,
630 template <
typename Number>
634 const Number *
const u_val,
635 const Number *
const v_val,
670 template <
typename Number>
716 template <
typename Number>
753 template <
typename Number,
typename Number2>
756 static constexpr bool vectorizes = std::is_same_v<Number, Number2> &&
759 Dot(
const Number *
const X,
const Number2 *
const Y)
785 "This operation is not correctly implemented for "
786 "complex-valued objects.");
790 const Number *
const X;
791 const Number2 *
const Y;
794 template <
typename Number,
typename RealType>
817 const Number *
const X;
820 template <
typename Number,
typename RealType>
846 template <
typename Number,
typename RealType>
874 template <
typename Number>
900 template <
typename Number>
906 const Number *
const V,
907 const Number *
const W,
942 "This operation is not correctly implemented for "
943 "complex-valued objects.");
948 const Number *
const V;
949 const Number *
const W;
997 template <
typename Operation,
typename ResultType>
1006 result = ResultType();
1029 std::bool_constant<Operation::vectorizes>());
1038 for (; j + 2 * n_lanes - 1 < n_chunks;
1039 j += 2 * n_lanes, n_chunks += n_lanes)
1042 a.
load(outer_results + j);
1043 b.load(outer_results + j + n_lanes);
1045 a.
store(outer_results + n_chunks);
1050 if (Operation::vectorizes)
1055 ResultType *result_ptr = outer_results + j;
1057 for (
unsigned int i = 0; i < 8; ++i)
1058 result_ptr[i] = result_ptr[i] + result_ptr[i + 8];
1060 for (
unsigned int i = 0; i < 4; ++i)
1061 result_ptr[i] = result_ptr[i] + result_ptr[i + 4];
1063 for (
unsigned int i = 0; i < 2; ++i)
1064 result_ptr[i] = result_ptr[i] + result_ptr[i + 2];
1065 result = result_ptr[0] + result_ptr[1];
1072 for (; j + 1 < n_chunks; j += 2, ++n_chunks)
1073 outer_results[n_chunks] =
1074 outer_results[j] + outer_results[j + 1];
1079 result = outer_results[n_chunks - 1];
1091 ResultType r0, r1, r2, r3;
1095 first + 2 * new_size,
1096 first + 3 * new_size,
1099 result = (r0 + r1) + (r2 + r3);
1111 template <
typename Operation,
typename ResultType>
1116 ResultType *outer_results,
1117 std::bool_constant<false>)
1125 for (
size_type i = 0; i < n_chunks; ++i)
1128 for (
unsigned int k = 0; k < 2; ++k)
1130 ResultType r0 = op(
index);
1131 ResultType r1 = op(
index + 1);
1132 ResultType r2 = op(
index + 2);
1133 ResultType r3 = op(
index + 3);
1138 r1 += op(
index + 1);
1139 r2 += op(
index + 2);
1140 r3 += op(
index + 3);
1142 r += (r0 + r1) + (r2 + r3);
1144 outer_results[i] = r;
1147 if (n_chunks * 32 < vec_size)
1149 const size_type remainder = vec_size - n_chunks * 32;
1150 const size_type inner_chunks = remainder / 8;
1151 const size_type remainder_inner = remainder % 8;
1152 ResultType r0 = ResultType(), r1 = ResultType(), r2 = ResultType();
1153 switch (inner_chunks)
1172 for (
size_type j = 0; j < remainder_inner; ++j)
1174 outer_results[n_chunks++] = (r0 + r2) + r1;
1193 template <
typename Operation,
typename Number>
1198 Number *outer_results,
1199 std::bool_constant<true>)
1211 const size_type regular_chunks = vec_size / (32 * n_lanes);
1212 for (
size_type i = 0; i < regular_chunks; ++i)
1215 for (
unsigned int k = 0; k < 2; ++k)
1220 op.do_vectorized(
index + 2 * n_lanes);
1222 op.do_vectorized(
index + 3 * n_lanes);
1223 index += n_lanes * 4;
1226 r0 += op.do_vectorized(
index);
1227 r1 += op.do_vectorized(
index + n_lanes);
1228 r2 += op.do_vectorized(
index + 2 * n_lanes);
1229 r3 += op.do_vectorized(
index + 3 * n_lanes);
1231 r += (r0 + r1) + (r2 + r3);
1233 r.
store(&outer_results[i * n_lanes]);
1242 static_assert(n_lanes <= 16 && 16 % n_lanes == 0,
1243 "VectorizedArray::size() must be 1, 2, 4, 8, or 16");
1244 size_type n_chunks = regular_chunks * n_lanes;
1245 const size_type start_irregular = regular_chunks * n_lanes * 32;
1246 if (start_irregular < vec_size)
1250 const size_type remainder = vec_size - start_irregular;
1251 const size_type loop_length = remainder / (2 * n_lanes);
1252 for (
size_type j = 0; j < loop_length; ++j,
index += 2 * n_lanes)
1254 r0 += op.do_vectorized(
index);
1255 r1 += op.do_vectorized(
index + n_lanes);
1257 Number scalar_part = Number();
1258 size_type last = remainder % (2 * n_lanes);
1261 if (last >= n_lanes)
1263 r0 += op.do_vectorized(
index);
1267 for (
unsigned int i = 0; i < last; ++i)
1268 scalar_part += op(
index++);
1272 r0.
store(&outer_results[n_chunks]);
1273 outer_results[n_chunks] += scalar_part;
1277 n_chunks += n_lanes;
1288#ifdef DEAL_II_WITH_TBB
1317 template <
typename Operation,
typename ResultType>
1331 const unsigned int gs =
1366 for (
size_type i = range.begin(); i < range.end(); ++i)
1407 template <
typename Operation,
typename ResultType>
1413 const Operation &op,
1417 const std::shared_ptr<::parallel::internal::TBBPartitioner>
1420#ifdef DEAL_II_WITH_TBB
1428 Assert(partitioner.get() !=
nullptr,
1430 "Unexpected initialization of Vector that does "
1431 "not set the TBB partitioner to a usable state."));
1432 std::shared_ptr<tbb::affinity_partitioner> tbb_partitioner =
1433 partitioner->acquire_one_partitioner();
1451 partitioner->release_one_partitioner(tbb_partitioner);
1452 result = generic_functor.
do_sum();
1463 template <
typename Number,
typename Number2,
typename MemorySpace>
1467 copy(
const std::shared_ptr<::parallel::internal::TBBPartitioner> &
1470 const ::MemorySpace::MemorySpaceData<Number2, MemorySpace>
1474 typename MemorySpace::kokkos_space::execution_space exec;
1477 Kokkos::subview(
data.values,
1478 Kokkos::pair<size_type, size_type>(0,
size)),
1479 Kokkos::subview(v_data.values,
1480 Kokkos::pair<size_type, size_type>(0,
size)));
1486 const std::shared_ptr<::parallel::internal::TBBPartitioner> &
1495 const std::shared_ptr<::parallel::internal::TBBPartitioner> &
1498 const ::MemorySpace::MemorySpaceData<Number, MemorySpace>
1505 const std::shared_ptr<::parallel::internal::TBBPartitioner> &
1508 const ::MemorySpace::MemorySpaceData<Number, MemorySpace>
1515 const std::shared_ptr<::parallel::internal::TBBPartitioner> &
1524 const std::shared_ptr<::parallel::internal::TBBPartitioner> &
1528 const ::MemorySpace::MemorySpaceData<Number, MemorySpace>
1535 const std::shared_ptr<::parallel::internal::TBBPartitioner> &
1540 const ::MemorySpace::MemorySpaceData<Number, MemorySpace>
1542 const ::MemorySpace::MemorySpaceData<Number, MemorySpace>
1549 const std::shared_ptr<::parallel::internal::TBBPartitioner> &
1553 const ::MemorySpace::MemorySpaceData<Number, MemorySpace>
1560 const std::shared_ptr<::parallel::internal::TBBPartitioner> &
1565 const ::MemorySpace::MemorySpaceData<Number, MemorySpace>
1572 const std::shared_ptr<::parallel::internal::TBBPartitioner> &
1578 const ::MemorySpace::MemorySpaceData<Number, MemorySpace>
1580 const ::MemorySpace::MemorySpaceData<Number, MemorySpace>
1587 const std::shared_ptr<::parallel::internal::TBBPartitioner> &
1596 const std::shared_ptr<::parallel::internal::TBBPartitioner> &
1599 const ::MemorySpace::MemorySpaceData<Number, MemorySpace>
1606 const std::shared_ptr<::parallel::internal::TBBPartitioner> &
1610 const ::MemorySpace::MemorySpaceData<Number, MemorySpace>
1617 const std::shared_ptr<::parallel::internal::TBBPartitioner> &
1622 const ::MemorySpace::MemorySpaceData<Number, MemorySpace>
1624 const ::MemorySpace::MemorySpaceData<Number, MemorySpace>
1631 const std::shared_ptr<::parallel::internal::TBBPartitioner> &
1634 const ::MemorySpace::MemorySpaceData<Number2, MemorySpace>
1641 template <
typename real_type>
1644 const std::shared_ptr<::parallel::internal::TBBPartitioner> &
1648 const ::MemorySpace::MemorySpaceData<Number, MemorySpace>
1655 const std::shared_ptr<::parallel::internal::TBBPartitioner> &
1658 const ::MemorySpace::MemorySpaceData<Number, MemorySpace>
1664 template <
typename real_type>
1667 const std::shared_ptr<::parallel::internal::TBBPartitioner> &
1675 template <
typename real_type>
1678 const std::shared_ptr<::parallel::internal::TBBPartitioner> &
1688 const std::shared_ptr<::parallel::internal::TBBPartitioner> &
1692 const ::MemorySpace::MemorySpaceData<Number, MemorySpace>
1694 const ::MemorySpace::MemorySpaceData<Number, MemorySpace>
1701 template <
typename MemorySpace2>
1704 const std::shared_ptr<::parallel::internal::TBBPartitioner> &
1708 const ::MemorySpace::MemorySpaceData<Number, MemorySpace2>
1716 template <
typename Number,
typename Number2>
1720 copy(
const std::shared_ptr<::parallel::internal::TBBPartitioner>
1721 &thread_loop_partitioner,
1723 const ::MemorySpace::
1724 MemorySpaceData<Number2, ::
MemorySpace::Host> &v_data,
1730 data.values.data());
1735 set(
const std::shared_ptr<::parallel::internal::TBBPartitioner>
1736 &thread_loop_partitioner,
1749 const std::shared_ptr<::parallel::internal::TBBPartitioner>
1750 &thread_loop_partitioner,
1752 const ::MemorySpace::
1753 MemorySpaceData<Number, ::
MemorySpace::Host> &v_data,
1759 v_data.values.data());
1765 const std::shared_ptr<::parallel::internal::TBBPartitioner>
1766 &thread_loop_partitioner,
1768 const ::MemorySpace::
1769 MemorySpaceData<Number, ::
MemorySpace::Host> &v_data,
1775 v_data.values.data());
1781 const std::shared_ptr<::parallel::internal::TBBPartitioner>
1782 &thread_loop_partitioner,
1794 add_av(
const std::shared_ptr<::parallel::internal::TBBPartitioner>
1795 &thread_loop_partitioner,
1798 const ::MemorySpace::
1799 MemorySpaceData<Number, ::
MemorySpace::Host> &v_data,
1804 if (a == Number(1.0))
1807 v_data.values.data());
1813 v_data.values.data(),
1821 const std::shared_ptr<::parallel::internal::TBBPartitioner>
1822 &thread_loop_partitioner,
1826 const ::MemorySpace::
1827 MemorySpaceData<Number, ::
MemorySpace::Host> &v_data,
1829 MemorySpaceData<Number, ::
MemorySpace::Host> &w_data,
1835 data.values.data(), v_data.values.data(), w_data.values.data(), a, b);
1841 const std::shared_ptr<::parallel::internal::TBBPartitioner>
1842 &thread_loop_partitioner,
1845 const ::MemorySpace::
1846 MemorySpaceData<Number, ::
MemorySpace::Host> &v_data,
1852 v_data.values.data(),
1859 const std::shared_ptr<::parallel::internal::TBBPartitioner>
1860 &thread_loop_partitioner,
1864 const ::MemorySpace::
1865 MemorySpaceData<Number, ::
MemorySpace::Host> &v_data,
1871 v_data.values.data(),
1879 const std::shared_ptr<::parallel::internal::TBBPartitioner>
1880 &thread_loop_partitioner,
1885 const ::MemorySpace::
1886 MemorySpaceData<Number, ::
MemorySpace::Host> &v_data,
1888 MemorySpaceData<Number, ::
MemorySpace::Host> &w_data,
1894 v_data.values.data(),
1895 w_data.values.data(),
1904 const std::shared_ptr<::parallel::internal::TBBPartitioner>
1905 &thread_loop_partitioner,
1907 const Number factor,
1913 data.values.data(), factor);
1918 scale(
const std::shared_ptr<::parallel::internal::TBBPartitioner>
1919 &thread_loop_partitioner,
1921 const ::MemorySpace::
1922 MemorySpaceData<Number, ::
MemorySpace::Host> &v_data,
1928 v_data.values.data());
1933 equ_au(
const std::shared_ptr<::parallel::internal::TBBPartitioner>
1934 &thread_loop_partitioner,
1937 const ::MemorySpace::
1938 MemorySpaceData<Number, ::
MemorySpace::Host> &v_data,
1944 v_data.values.data(),
1951 const std::shared_ptr<::parallel::internal::TBBPartitioner>
1952 &thread_loop_partitioner,
1956 const ::MemorySpace::
1957 MemorySpaceData<Number, ::
MemorySpace::Host> &v_data,
1959 MemorySpaceData<Number, ::
MemorySpace::Host> &w_data,
1965 data.values.data(), v_data.values.data(), w_data.values.data(), a, b);
1970 dot(
const std::shared_ptr<::parallel::internal::TBBPartitioner>
1971 &thread_loop_partitioner,
1973 const ::MemorySpace::
1974 MemorySpaceData<Number2, ::
MemorySpace::Host> &v_data,
1981 data.values.data(), v_data.values.data());
1983 dot, 0,
size, sum, thread_loop_partitioner);
1989 template <
typename real_type>
1991 norm_2(
const std::shared_ptr<::parallel::internal::TBBPartitioner>
1992 &thread_loop_partitioner,
2005 const std::shared_ptr<::parallel::internal::TBBPartitioner>
2006 &thread_loop_partitioner,
2008 const ::MemorySpace::
2018 template <
typename real_type>
2020 norm_1(
const std::shared_ptr<::parallel::internal::TBBPartitioner>
2021 &thread_loop_partitioner,
2032 optional_offset +
size,
2034 thread_loop_partitioner);
2037 template <
typename real_type>
2039 norm_p(
const std::shared_ptr<::parallel::internal::TBBPartitioner>
2040 &thread_loop_partitioner,
2054 const std::shared_ptr<::parallel::internal::TBBPartitioner>
2055 &thread_loop_partitioner,
2058 const ::MemorySpace::
2059 MemorySpaceData<Number, ::
MemorySpace::Host> &v_data,
2061 MemorySpaceData<Number, ::
MemorySpace::Host> &w_data,
2068 v_data.values.data(),
2069 w_data.values.data(),
2076 template <
typename MemorySpace2>
2079 const std::shared_ptr<::parallel::internal::TBBPartitioner>
2080 &thread_loop_partitioner,
2083 const ::MemorySpace::MemorySpaceData<Number, MemorySpace2>
2089 std::is_same_v<MemorySpace2, ::MemorySpace::Host>,
2106 template <
typename MemorySpace2>
2109 const std::shared_ptr<::parallel::internal::TBBPartitioner>
2113 const ::MemorySpace::MemorySpaceData<Number, MemorySpace2>
2119 std::is_same_v<MemorySpace2, ::MemorySpace::Default>,
2125 Kokkos::subview(
data.values,
2126 Kokkos::pair<size_type, size_type>(0,
size)),
2127 Kokkos::subview(v_data.values,
2128 Kokkos::pair<size_type, size_type>(0,
size)));
2139 template <
typename Number>
2144 const std::shared_ptr<::parallel::internal::TBBPartitioner> &,
2146 const ::MemorySpace::
2147 MemorySpaceData<Number, ::
MemorySpace::Default> &v_data,
2152 typename ::MemorySpace::Default::kokkos_space::execution_space
2156 Kokkos::subview(
data.values,
2157 Kokkos::pair<size_type, size_type>(0,
size)),
2158 Kokkos::subview(v_data.values,
2159 Kokkos::pair<size_type, size_type>(0,
size)));
2164 set(
const std::shared_ptr<::parallel::internal::TBBPartitioner> &,
2171 typename ::MemorySpace::Default::kokkos_space::execution_space
2175 Kokkos::subview(
data.values,
2176 Kokkos::pair<size_type, size_type>(0,
size)),
2183 const std::shared_ptr<::parallel::internal::TBBPartitioner> &,
2185 const ::MemorySpace::
2186 MemorySpaceData<Number, ::
MemorySpace::Default> &v_data,
2191 auto exec = typename ::MemorySpace::Default::kokkos_space::
2193 Kokkos::parallel_for(
2195 Kokkos::RangePolicy<
2196 ::MemorySpace::Default::kokkos_space::execution_space>(
2198 KOKKOS_LAMBDA(
int i) {
data.values(i) += v_data.values(i); });
2204 const std::shared_ptr<::parallel::internal::TBBPartitioner> &,
2206 const ::MemorySpace::
2207 MemorySpaceData<Number, ::
MemorySpace::Default> &v_data,
2212 auto exec = typename ::MemorySpace::Default::kokkos_space::
2214 Kokkos::parallel_for(
2215 "::subtract_vector",
2216 Kokkos::RangePolicy<
2217 ::MemorySpace::Default::kokkos_space::execution_space>(
2219 KOKKOS_LAMBDA(
size_type i) {
data.values(i) -= v_data.values(i); });
2225 const std::shared_ptr<::parallel::internal::TBBPartitioner> &,
2232 auto exec = typename ::MemorySpace::Default::kokkos_space::
2234 Kokkos::parallel_for(
2236 Kokkos::RangePolicy<
2237 ::MemorySpace::Default::kokkos_space::execution_space>(
2245 const std::shared_ptr<::parallel::internal::TBBPartitioner> &,
2248 const ::MemorySpace::
2249 MemorySpaceData<Number, ::
MemorySpace::Default> &v_data,
2254 if (a == Number(1.0))
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);
2274 const std::shared_ptr<::parallel::internal::TBBPartitioner> &,
2278 const ::MemorySpace::
2279 MemorySpaceData<Number, ::
MemorySpace::Default> &v_data,
2281 MemorySpaceData<Number, ::
MemorySpace::Default> &w_data,
2286 auto exec = typename ::MemorySpace::Default::kokkos_space::
2288 Kokkos::parallel_for(
2290 Kokkos::RangePolicy<
2291 ::MemorySpace::Default::kokkos_space::execution_space>(
2294 data.values(i) += a * v_data.values(i) + b * w_data.values(i);
2301 const std::shared_ptr<::parallel::internal::TBBPartitioner> &,
2304 const ::MemorySpace::
2305 MemorySpaceData<Number, ::
MemorySpace::Default> &v_data,
2310 auto exec = typename ::MemorySpace::Default::kokkos_space::
2312 Kokkos::parallel_for(
2314 Kokkos::RangePolicy<
2315 ::MemorySpace::Default::kokkos_space::execution_space>(
2318 data.values(i) = x *
data.values(i) + v_data.values(i);
2325 const std::shared_ptr<::parallel::internal::TBBPartitioner> &,
2329 const ::MemorySpace::
2330 MemorySpaceData<Number, ::
MemorySpace::Default> &v_data,
2335 auto exec = typename ::MemorySpace::Default::kokkos_space::
2337 Kokkos::parallel_for(
2339 Kokkos::RangePolicy<
2340 ::MemorySpace::Default::kokkos_space::execution_space>(
2343 data.values(i) = x *
data.values(i) + a * v_data.values(i);
2350 const std::shared_ptr<::parallel::internal::TBBPartitioner> &,
2355 const ::MemorySpace::
2356 MemorySpaceData<Number, ::
MemorySpace::Default> &v_data,
2358 MemorySpaceData<Number, ::
MemorySpace::Default> &w_data,
2363 auto exec = typename ::MemorySpace::Default::kokkos_space::
2365 Kokkos::parallel_for(
2367 Kokkos::RangePolicy<
2368 ::MemorySpace::Default::kokkos_space::execution_space>(
2372 x *
data.values(i) + a * v_data.values(i) + b * w_data.values(i);
2379 const std::shared_ptr<::parallel::internal::TBBPartitioner> &,
2381 const Number factor,
2386 auto exec = typename ::MemorySpace::Default::kokkos_space::
2388 Kokkos::parallel_for(
2389 "::multiply_factor",
2390 Kokkos::RangePolicy<
2391 ::MemorySpace::Default::kokkos_space::execution_space>(
2399 const std::shared_ptr<::parallel::internal::TBBPartitioner> &,
2401 const ::MemorySpace::
2402 MemorySpaceData<Number, ::
MemorySpace::Default> &v_data,
2407 auto exec = typename ::MemorySpace::Default::kokkos_space::
2409 Kokkos::parallel_for(
2411 Kokkos::RangePolicy<
2412 ::MemorySpace::Default::kokkos_space::execution_space>(
2414 KOKKOS_LAMBDA(
size_type i) {
data.values(i) *= v_data.values(i); });
2420 const std::shared_ptr<::parallel::internal::TBBPartitioner> &,
2423 const ::MemorySpace::
2424 MemorySpaceData<Number, ::
MemorySpace::Default> &v_data,
2429 auto exec = typename ::MemorySpace::Default::kokkos_space::
2431 Kokkos::parallel_for(
2433 Kokkos::RangePolicy<
2434 ::MemorySpace::Default::kokkos_space::execution_space>(
2437 data.values(i) = a * v_data.values(i);
2444 const std::shared_ptr<::parallel::internal::TBBPartitioner> &,
2448 const ::MemorySpace::
2449 MemorySpaceData<Number, ::
MemorySpace::Default> &v_data,
2451 MemorySpaceData<Number, ::
MemorySpace::Default> &w_data,
2456 auto exec = typename ::MemorySpace::Default::kokkos_space::
2458 Kokkos::parallel_for(
2460 Kokkos::RangePolicy<
2461 ::MemorySpace::Default::kokkos_space::execution_space>(
2464 data.values(i) = a * v_data.values(i) + b * w_data.values(i);
2470 dot(
const std::shared_ptr<::parallel::internal::TBBPartitioner> &,
2472 const ::MemorySpace::
2473 MemorySpaceData<Number, ::
MemorySpace::Default> &v_data,
2480 auto exec = typename ::MemorySpace::Default::kokkos_space::
2482 Kokkos::parallel_reduce(
2484 Kokkos::RangePolicy<
2485 ::MemorySpace::Default::kokkos_space::execution_space>(
2487 KOKKOS_LAMBDA(
size_type i, Number & update) {
2488 update +=
data.values(i) * v_data.values(i);
2496 template <
typename real_type>
2498 norm_2(
const std::shared_ptr<::parallel::internal::TBBPartitioner>
2499 &thread_loop_partitioner,
2510 const std::shared_ptr<::parallel::internal::TBBPartitioner> &,
2512 const ::MemorySpace::
2517 auto exec = typename ::MemorySpace::Default::kokkos_space::
2519 Kokkos::parallel_reduce(
2521 Kokkos::RangePolicy<
2522 ::MemorySpace::Default::kokkos_space::execution_space>(
2524 KOKKOS_LAMBDA(
size_type i, Number & update) {
2525 update +=
data.values(i);
2533 template <
typename real_type>
2536 const std::shared_ptr<::parallel::internal::TBBPartitioner> &,
2544 auto exec = typename ::MemorySpace::Default::kokkos_space::
2546 Kokkos::parallel_reduce(
2548 Kokkos::RangePolicy<
2549 ::MemorySpace::Default::kokkos_space::execution_space>(
2550 exec, optional_offset, optional_offset +
size),
2551 KOKKOS_LAMBDA(
size_type i, Number & update) {
2552#if DEAL_II_KOKKOS_VERSION_GTE(3, 7, 0)
2553 update += Kokkos::abs(
data.values(i));
2555 update += Kokkos::Experimental::fabs(
data.values(i));
2561 template <
typename real_type>
2564 const std::shared_ptr<::parallel::internal::TBBPartitioner> &,
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#if DEAL_II_KOKKOS_VERSION_GTE(3, 7, 0)
2581 update += Kokkos::pow(Kokkos::abs(
data.values(i)), exp);
2583 update += Kokkos::Experimental::pow(
2584 Kokkos::Experimental::fabs(
data.values(i)), exp);
2592 const std::shared_ptr<::parallel::internal::TBBPartitioner> &,
2595 const ::MemorySpace::
2596 MemorySpaceData<Number, ::
MemorySpace::Default> &v_data,
2598 MemorySpaceData<Number, ::
MemorySpace::Default> &w_data,
2605 auto exec = typename ::MemorySpace::Default::kokkos_space::
2607 Kokkos::parallel_reduce(
2609 Kokkos::RangePolicy<
2610 ::MemorySpace::Default::kokkos_space::execution_space>(
2612 KOKKOS_LAMBDA(
size_type i, Number & update) {
2613 data.values(i) += a * v_data.values(i);
2623 template <
typename MemorySpace2>
2626 const std::shared_ptr<::parallel::internal::TBBPartitioner>
2627 &thread_loop_partitioner,
2630 const ::MemorySpace::MemorySpaceData<Number, MemorySpace2>
2636 std::is_same_v<MemorySpace2, ::MemorySpace::Default>,
2653 template <
typename MemorySpace2>
2656 const std::shared_ptr<::parallel::internal::TBBPartitioner>
2660 const ::MemorySpace::MemorySpaceData<Number, MemorySpace2>
2666 std::is_same_v<MemorySpace2, ::MemorySpace::Host>,
2672 Kokkos::subview(
data.values,
2673 Kokkos::pair<size_type, size_type>(0,
size)),
2674 Kokkos::subview(v_data.values,
2675 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
static ::ExceptionBase & ExcNotImplemented()
#define Assert(cond, exc)
#define AssertIsFinite(number)
#define AssertDimension(dim1, dim2)
#define AssertIndexRange(index, range)
static ::ExceptionBase & ExcInternalError()
static ::ExceptionBase & ExcMessage(std::string arg1)
#define AssertThrow(cond, exc)
std::vector< index_type > data
unsigned int minimum_parallel_grain_size
void accumulate_recursive(const Operation &op, const size_type first, const size_type last, ResultType &result)
bool is_non_negative(const T &t)
size_type do_accumulate(const Operation op, const size_type vec_size, const size_type start_index, ResultType *outer_results, std::bool_constant< false >)
void parallel_reduce(const Operation &op, const size_type start, const size_type end, ResultType &result, const std::shared_ptr<::parallel::internal::TBBPartitioner > &partitioner)
void copy(const T *begin, const T *end, U *dest)
void parallel_for(Functor &functor, const size_type start, const size_type end, const std::shared_ptr<::parallel::internal::TBBPartitioner > &partitioner)
const unsigned int vector_accumulation_recursion_threshold
types::global_dof_index size_type
void parallel_for(Iterator x_begin, Iterator x_end, const Functor &functor, const unsigned int grainsize)
::VectorizedArray< Number, width > min(const ::VectorizedArray< Number, width > &, const ::VectorizedArray< Number, width > &)
::VectorizedArray< Number, width > pow(const ::VectorizedArray< Number, width > &, const Number p)
::VectorizedArray< Number, width > abs(const ::VectorizedArray< Number, width > &)
unsigned int global_dof_index
static const bool vectorizes
AddAndDot(Number *const X, const Number *const V, const Number *const W, const Number a)
Number operator()(const size_type i) const
VectorizedArray< Number > do_vectorized(const size_type i) const
Dot(const Number *const X, const Number2 *const Y)
static constexpr bool vectorizes
Number operator()(const size_type i) const
VectorizedArray< Number > do_vectorized(const size_type i) const
Number operator()(const size_type i) const
VectorizedArray< Number > do_vectorized(const size_type i) const
MeanValue(const Number *X)
static const bool vectorizes
RealType operator()(const size_type i) const
static const bool vectorizes
VectorizedArray< Number > do_vectorized(const size_type i) const
Norm2(const Number *const X)
RealType operator()(const size_type i) const
static const bool vectorizes
VectorizedArray< Number > do_vectorized(const size_type i) const
RealType operator()(const size_type i) const
NormP(const Number *X, RealType p)
VectorizedArray< Number > do_vectorized(const size_type i) const
static const bool vectorizes
void operator()(const tbb::blocked_range< size_type > &range) const
TBBForFunctor(Functor &functor, const size_type start, const size_type end)
static const unsigned int threshold_array_allocate
TBBReduceFunctor(const Operation &op, const size_type start, const size_type end)
ResultType small_array[threshold_array_allocate]
ResultType do_sum() const
void operator()(const tbb::blocked_range< size_type > &range) const
std::vector< ResultType > large_array
Vector_copy(const OtherNumber *const src, Number *const dst)
void operator()(const size_type begin, const size_type end) const
const OtherNumber *const src
Vector_set(const Number value, Number *const dst)
void operator()(const size_type begin, const size_type end) const
Vectorization_add_av(Number *const val, const Number *const v_val, const Number factor)
void operator()(const size_type begin, const size_type end) const
const Number *const v_val
const Number stored_factor
Vectorization_add_avpbw(Number *const val, const Number *const v_val, const Number *const w_val, const Number a, const Number b)
void operator()(const size_type begin, const size_type end) const
const Number *const w_val
const Number *const v_val
void operator()(const size_type begin, const size_type end) const
const Number stored_factor
Vectorization_add_factor(Number *const val, const Number factor)
void operator()(const size_type begin, const size_type end) const
const Number *const v_val
Vectorization_add_v(Number *const val, const Number *const v_val)
const Number *const u_val
Vectorization_equ_au(Number *const val, const Number *const u_val, const Number a)
void operator()(const size_type begin, const size_type end) const
Vectorization_equ_aubv(Number *const val, const Number *const u_val, const Number *const v_val, const Number a, const Number b)
const Number *const u_val
void operator()(const size_type begin, const size_type end) const
const Number *const v_val
Vectorization_equ_aubvcw(Number *val, const Number *u_val, const Number *v_val, const Number *w_val, const Number a, const Number b, const Number c)
const Number *const w_val
const Number *const v_val
const Number *const u_val
void operator()(const size_type begin, const size_type end) const
Vectorization_multiply_factor(Number *const val, const Number factor)
const Number stored_factor
void operator()(const size_type begin, const size_type end) const
void operator()(const size_type begin, const size_type end) const
const Number *const a_val
Vectorization_ratio(Number *val, const Number *a_val, const Number *b_val)
const Number *const b_val
Vectorization_sadd_xav(Number *val, const Number *const v_val, const Number a, const Number x)
const Number *const v_val
void operator()(const size_type begin, const size_type end) const
const Number *const v_val
const Number *const w_val
void operator()(const size_type begin, const size_type end) const
Vectorization_sadd_xavbw(Number *val, const Number *v_val, const Number *w_val, Number x, Number a, Number b)
Vectorization_sadd_xv(Number *const val, const Number *const v_val, const Number x)
void operator()(const size_type begin, const size_type end) const
const Number *const v_val
const Number *const v_val
void operator()(const size_type begin, const size_type end) const
Vectorization_scale(Number *const val, const Number *const v_val)
Vectorization_subtract_v(Number *val, const Number *const v_val)
void operator()(const size_type begin, const size_type end) const
const Number *const v_val
static void set(const std::shared_ptr<::parallel::internal::TBBPartitioner > &thread_loop_partitioner, const size_type size, const Number s, ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Host > &data)
static void norm_2(const std::shared_ptr<::parallel::internal::TBBPartitioner > &thread_loop_partitioner, const size_type size, real_type &sum, ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Host > &data)
static void norm_p(const std::shared_ptr<::parallel::internal::TBBPartitioner > &thread_loop_partitioner, const size_type size, real_type &sum, const real_type p, ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Host > &data)
static void import_elements(const std::shared_ptr<::parallel::internal::TBBPartitioner > &, const size_type size, VectorOperation::values operation, const ::MemorySpace::MemorySpaceData< Number, MemorySpace2 > &v_data, ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Host > &data, std::enable_if_t< std::is_same_v< MemorySpace2, ::MemorySpace::Default >, int >=0)
static void add_avpbw(const std::shared_ptr<::parallel::internal::TBBPartitioner > &thread_loop_partitioner, const size_type size, const Number a, const Number b, const ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Host > &v_data, const ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Host > &w_data, ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Host > &data)
static void sadd_xav(const std::shared_ptr<::parallel::internal::TBBPartitioner > &thread_loop_partitioner, const size_type size, const Number x, const Number a, const ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Host > &v_data, ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Host > &data)
static void equ_au(const std::shared_ptr<::parallel::internal::TBBPartitioner > &thread_loop_partitioner, const size_type size, const Number a, const ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Host > &v_data, ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Host > &data)
static void scale(const std::shared_ptr<::parallel::internal::TBBPartitioner > &thread_loop_partitioner, const size_type size, const ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Host > &v_data, ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Host > &data)
static Number mean_value(const std::shared_ptr<::parallel::internal::TBBPartitioner > &thread_loop_partitioner, const size_type size, const ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Host > &data)
static void add_factor(const std::shared_ptr<::parallel::internal::TBBPartitioner > &thread_loop_partitioner, const size_type size, Number a, ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Host > &data)
static void sadd_xv(const std::shared_ptr<::parallel::internal::TBBPartitioner > &thread_loop_partitioner, const size_type size, const Number x, const ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Host > &v_data, ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Host > &data)
static void copy(const std::shared_ptr<::parallel::internal::TBBPartitioner > &thread_loop_partitioner, const size_type size, const ::MemorySpace::MemorySpaceData< Number2, ::MemorySpace::Host > &v_data, ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Host > &data)
static void import_elements(const std::shared_ptr<::parallel::internal::TBBPartitioner > &thread_loop_partitioner, const size_type size, VectorOperation::values operation, const ::MemorySpace::MemorySpaceData< Number, MemorySpace2 > &v_data, ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Host > &data, std::enable_if_t< std::is_same_v< MemorySpace2, ::MemorySpace::Host >, int >=0)
static void add_av(const std::shared_ptr<::parallel::internal::TBBPartitioner > &thread_loop_partitioner, const size_type size, const Number a, const ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Host > &v_data, ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Host > &data)
static void add_vector(const std::shared_ptr<::parallel::internal::TBBPartitioner > &thread_loop_partitioner, const size_type size, const ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Host > &v_data, ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Host > &data)
static void sadd_xavbw(const std::shared_ptr<::parallel::internal::TBBPartitioner > &thread_loop_partitioner, const size_type size, const Number x, const Number a, const Number b, const ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Host > &v_data, const ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Host > &w_data, ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Host > &data)
static void subtract_vector(const std::shared_ptr<::parallel::internal::TBBPartitioner > &thread_loop_partitioner, const size_type size, const ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Host > &v_data, ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Host > &data)
static Number add_and_dot(const std::shared_ptr<::parallel::internal::TBBPartitioner > &thread_loop_partitioner, const size_type size, const Number a, const ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Host > &v_data, const ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Host > &w_data, ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Host > &data)
static Number dot(const std::shared_ptr<::parallel::internal::TBBPartitioner > &thread_loop_partitioner, const size_type size, const ::MemorySpace::MemorySpaceData< Number2, ::MemorySpace::Host > &v_data, ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Host > &data)
static void equ_aubv(const std::shared_ptr<::parallel::internal::TBBPartitioner > &thread_loop_partitioner, const size_type size, const Number a, const Number b, const ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Host > &v_data, const ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Host > &w_data, ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Host > &data)
static void norm_1(const std::shared_ptr<::parallel::internal::TBBPartitioner > &thread_loop_partitioner, const size_type size, real_type &sum, ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Host > &data, const size_type optional_offset=0)
static void multiply_factor(const std::shared_ptr<::parallel::internal::TBBPartitioner > &thread_loop_partitioner, const size_type size, const Number factor, ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Host > &data)
static void subtract_vector(const std::shared_ptr<::parallel::internal::TBBPartitioner > &, const size_type size, const ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Default > &v_data, ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Default > &data)
static void sadd_xav(const std::shared_ptr<::parallel::internal::TBBPartitioner > &, const size_type size, const Number x, const Number a, const ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Default > &v_data, ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Default > &data)
static Number dot(const std::shared_ptr<::parallel::internal::TBBPartitioner > &, const size_type size, const ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Default > &v_data, ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Default > &data)
static void add_av(const std::shared_ptr<::parallel::internal::TBBPartitioner > &, const size_type size, const Number a, const ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Default > &v_data, ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Default > &data)
static void copy(const std::shared_ptr<::parallel::internal::TBBPartitioner > &, const size_type size, const ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Default > &v_data, ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Default > &data)
static Number add_and_dot(const std::shared_ptr<::parallel::internal::TBBPartitioner > &, const size_type size, const Number a, const ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Default > &v_data, const ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Default > &w_data, ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Default > &data)
static void sadd_xavbw(const std::shared_ptr<::parallel::internal::TBBPartitioner > &, const size_type size, const Number x, const Number a, const Number b, const ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Default > &v_data, const ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Default > &w_data, ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Default > &data)
static Number mean_value(const std::shared_ptr<::parallel::internal::TBBPartitioner > &, const size_type size, const ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Default > &data)
static void norm_p(const std::shared_ptr<::parallel::internal::TBBPartitioner > &, const size_type size, real_type &sum, real_type exp, ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Default > &data)
static void add_factor(const std::shared_ptr<::parallel::internal::TBBPartitioner > &, const size_type size, Number a, ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Default > &data)
static void add_vector(const std::shared_ptr<::parallel::internal::TBBPartitioner > &, const size_type size, const ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Default > &v_data, ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Default > &data)
static void norm_1(const std::shared_ptr<::parallel::internal::TBBPartitioner > &, const size_type size, real_type &sum, ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Default > &data, const size_type optional_offset=0)
static void add_avpbw(const std::shared_ptr<::parallel::internal::TBBPartitioner > &, const size_type size, const Number a, const Number b, const ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Default > &v_data, const ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Default > &w_data, ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Default > &data)
static void set(const std::shared_ptr<::parallel::internal::TBBPartitioner > &, const size_type size, const Number s, ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Default > &data)
static void norm_2(const std::shared_ptr<::parallel::internal::TBBPartitioner > &thread_loop_partitioner, const size_type size, real_type &sum, ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Default > &data)
static void import_elements(const std::shared_ptr<::parallel::internal::TBBPartitioner > &, const size_type size, VectorOperation::values operation, const ::MemorySpace::MemorySpaceData< Number, MemorySpace2 > &v_data, ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Default > &data, std::enable_if_t< std::is_same_v< MemorySpace2, ::MemorySpace::Host >, int >=0)
static void sadd_xv(const std::shared_ptr<::parallel::internal::TBBPartitioner > &, const size_type size, const Number x, const ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Default > &v_data, ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Default > &data)
static void multiply_factor(const std::shared_ptr<::parallel::internal::TBBPartitioner > &, const size_type size, const Number factor, ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Default > &data)
static void scale(const std::shared_ptr<::parallel::internal::TBBPartitioner > &, const size_type size, const ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Default > &v_data, ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Default > &data)
static void equ_aubv(const std::shared_ptr<::parallel::internal::TBBPartitioner > &, const size_type size, const Number a, const Number b, const ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Default > &v_data, const ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Default > &w_data, ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Default > &data)
static void import_elements(const std::shared_ptr<::parallel::internal::TBBPartitioner > &thread_loop_partitioner, const size_type size, VectorOperation::values operation, const ::MemorySpace::MemorySpaceData< Number, MemorySpace2 > &v_data, ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Default > &data, std::enable_if_t< std::is_same_v< MemorySpace2, ::MemorySpace::Default >, int >=0)
static void equ_au(const std::shared_ptr<::parallel::internal::TBBPartitioner > &, const size_type size, const Number a, const ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Default > &v_data, ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Default > &data)
static Number mean_value(const std::shared_ptr<::parallel::internal::TBBPartitioner > &, const size_type, const ::MemorySpace::MemorySpaceData< Number, MemorySpace > &)
static void equ_au(const std::shared_ptr<::parallel::internal::TBBPartitioner > &, const size_type, const Number, const ::MemorySpace::MemorySpaceData< Number, MemorySpace > &, ::MemorySpace::MemorySpaceData< Number, MemorySpace > &)
static void add_avpbw(const std::shared_ptr<::parallel::internal::TBBPartitioner > &, const size_type, const Number, const Number, const ::MemorySpace::MemorySpaceData< Number, MemorySpace > &, const ::MemorySpace::MemorySpaceData< Number, MemorySpace > &, ::MemorySpace::MemorySpaceData< Number, MemorySpace > &)
static void sadd_xv(const std::shared_ptr<::parallel::internal::TBBPartitioner > &, const size_type, const Number, const ::MemorySpace::MemorySpaceData< Number, MemorySpace > &, ::MemorySpace::MemorySpaceData< Number, MemorySpace > &)
static void add_factor(const std::shared_ptr<::parallel::internal::TBBPartitioner > &, const size_type, Number, ::MemorySpace::MemorySpaceData< Number, MemorySpace > &)
static void norm_2(const std::shared_ptr<::parallel::internal::TBBPartitioner > &, const size_type, real_type &, const ::MemorySpace::MemorySpaceData< Number, MemorySpace > &, ::MemorySpace::MemorySpaceData< Number, MemorySpace > &)
static void add_vector(const std::shared_ptr<::parallel::internal::TBBPartitioner > &, const size_type, const ::MemorySpace::MemorySpaceData< Number, MemorySpace > &, ::MemorySpace::MemorySpaceData< Number, MemorySpace > &)
static void scale(const std::shared_ptr<::parallel::internal::TBBPartitioner > &, const size_type, const ::MemorySpace::MemorySpaceData< Number, MemorySpace > &, ::MemorySpace::MemorySpaceData< Number, MemorySpace > &)
static void subtract_vector(const std::shared_ptr<::parallel::internal::TBBPartitioner > &, const size_type, const ::MemorySpace::MemorySpaceData< Number, MemorySpace > &, ::MemorySpace::MemorySpaceData< Number, MemorySpace > &)
static void sadd_xavbw(const std::shared_ptr<::parallel::internal::TBBPartitioner > &, const size_type, const Number, const Number, const Number, const ::MemorySpace::MemorySpaceData< Number, MemorySpace > &, const ::MemorySpace::MemorySpaceData< Number, MemorySpace > &, ::MemorySpace::MemorySpaceData< Number, MemorySpace > &)
static Number dot(const std::shared_ptr<::parallel::internal::TBBPartitioner > &, const size_type, const ::MemorySpace::MemorySpaceData< Number2, MemorySpace > &, ::MemorySpace::MemorySpaceData< Number, MemorySpace > &)
static Number add_and_dot(const std::shared_ptr<::parallel::internal::TBBPartitioner > &, const size_type, const Number, const ::MemorySpace::MemorySpaceData< Number, MemorySpace > &, const ::MemorySpace::MemorySpaceData< Number, MemorySpace > &, ::MemorySpace::MemorySpaceData< Number, MemorySpace > &)
static void sadd_xav(const std::shared_ptr<::parallel::internal::TBBPartitioner > &, const size_type, const Number, const Number, const ::MemorySpace::MemorySpaceData< Number, MemorySpace > &, ::MemorySpace::MemorySpaceData< Number, MemorySpace > &)
static void import_elements(const std::shared_ptr<::parallel::internal::TBBPartitioner > &, const size_type, VectorOperation::values, const ::MemorySpace::MemorySpaceData< Number, MemorySpace2 > &, ::MemorySpace::MemorySpaceData< Number, MemorySpace > &)
static void 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 copy(const std::shared_ptr<::parallel::internal::TBBPartitioner > &, const size_type size, const ::MemorySpace::MemorySpaceData< Number2, MemorySpace > &v_data, ::MemorySpace::MemorySpaceData< Number, MemorySpace > &data)
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)