16#ifndef dealii_vector_operations_internal_h
17#define dealii_vector_operations_internal_h
30#include <Kokkos_Core.hpp>
35#ifdef DEAL_II_WITH_TBB
36# include <tbb/blocked_range.h>
37# include <tbb/partitioner.h>
45 namespace VectorOperations
71 template <
typename T,
typename U>
73 copy(
const T *begin,
const T *end, U *dest)
75 std::copy(begin, end, dest);
73 copy(
const T *begin,
const T *end, U *dest) {
…}
78 template <
typename T,
typename U>
80 copy(
const std::complex<T> *begin,
81 const std::complex<T> *end,
82 std::complex<U> *dest)
84 std::copy(begin, end, dest);
80 copy(
const std::complex<T> *begin, {
…}
87 template <
typename T,
typename U>
89 copy(
const std::complex<T> *,
const std::complex<T> *, U *)
92 ExcMessage(
"Can't convert a vector of complex numbers "
93 "into a vector of reals/doubles"));
89 copy(
const std::complex<T> *,
const std::complex<T> *, U *) {
…}
98#ifdef DEAL_II_WITH_TBB
107 template <
typename Functor>
119 const unsigned int gs =
153 template <
typename Functor>
159 const std::shared_ptr<::parallel::internal::TBBPartitioner>
162#ifdef DEAL_II_WITH_TBB
170 Assert(partitioner.get() !=
nullptr,
172 "Unexpected initialization of Vector that does "
173 "not set the TBB partitioner to a usable state."));
174 std::shared_ptr<tbb::affinity_partitioner> tbb_partitioner =
175 partitioner->acquire_one_partitioner();
191 partitioner->release_one_partitioner(tbb_partitioner);
193 else if (vec_size > 0)
205 template <
typename Number>
220 if (
value == Number())
221 std::fill(
dst + begin,
dst + end, Number());
230 template <
typename Number,
typename OtherNumber>
246 if constexpr (std::is_trivially_copyable<Number>() &&
247 std::is_same_v<Number, OtherNumber>)
248 std::memcpy(
dst + begin,
src + begin, (end - begin) *
sizeof(Number));
257 const OtherNumber *
const src;
261 template <
typename Number>
293 template <
typename Number>
297 const Number *
const v_val,
328 template <
typename Number>
332 const Number *
const v_val,
367 template <
typename Number>
395 template <
typename Number>
425 template <
typename Number>
453 template <
typename Number>
457 const Number *
const v_val,
458 const Number *
const w_val,
493 template <
typename Number>
497 const Number *
const v_val,
527 template <
typename Number>
570 template <
typename Number>
598 template <
typename Number>
602 const Number *
const u_val,
632 template <
typename Number>
636 const Number *
const u_val,
637 const Number *
const v_val,
672 template <
typename Number>
718 template <
typename Number>
755 template <
typename Number,
typename Number2>
758 static constexpr bool vectorizes = std::is_same_v<Number, Number2> &&
761 Dot(
const Number *
const X,
const Number2 *
const Y)
761 Dot(
const Number *
const X,
const Number2 *
const Y) {
…}
787 "This operation is not correctly implemented for "
788 "complex-valued objects.");
792 const Number *
const X;
793 const Number2 *
const Y;
796 template <
typename Number,
typename RealType>
819 const Number *
const X;
822 template <
typename Number,
typename RealType>
848 template <
typename Number,
typename RealType>
876 template <
typename Number>
902 template <
typename Number>
908 const Number *
const V,
909 const Number *
const W,
944 "This operation is not correctly implemented for "
945 "complex-valued objects.");
950 const Number *
const V;
951 const Number *
const W;
999 template <
typename Operation,
typename ResultType>
1008 result = ResultType();
1031 std::bool_constant<Operation::vectorizes>());
1040 for (; j + 2 * n_lanes - 1 < n_chunks;
1041 j += 2 * n_lanes, n_chunks += n_lanes)
1044 a.
load(outer_results + j);
1045 b.load(outer_results + j + n_lanes);
1047 a.
store(outer_results + n_chunks);
1052 if (Operation::vectorizes)
1057 ResultType *result_ptr = outer_results + j;
1059 for (
unsigned int i = 0; i < 8; ++i)
1060 result_ptr[i] = result_ptr[i] + result_ptr[i + 8];
1062 for (
unsigned int i = 0; i < 4; ++i)
1063 result_ptr[i] = result_ptr[i] + result_ptr[i + 4];
1065 for (
unsigned int i = 0; i < 2; ++i)
1066 result_ptr[i] = result_ptr[i] + result_ptr[i + 2];
1067 result = result_ptr[0] + result_ptr[1];
1074 for (; j + 1 < n_chunks; j += 2, ++n_chunks)
1075 outer_results[n_chunks] =
1076 outer_results[j] + outer_results[j + 1];
1081 result = outer_results[n_chunks - 1];
1093 ResultType r0, r1, r2, r3;
1097 first + 2 * new_size,
1098 first + 3 * new_size,
1101 result = (r0 + r1) + (r2 + r3);
1113 template <
typename Operation,
typename ResultType>
1118 ResultType *outer_results,
1119 std::bool_constant<false>)
1127 for (
size_type i = 0; i < n_chunks; ++i)
1130 for (
unsigned int k = 0; k < 2; ++k)
1132 ResultType r0 = op(
index);
1133 ResultType r1 = op(
index + 1);
1134 ResultType r2 = op(
index + 2);
1135 ResultType r3 = op(
index + 3);
1140 r1 += op(
index + 1);
1141 r2 += op(
index + 2);
1142 r3 += op(
index + 3);
1144 r += (r0 + r1) + (r2 + r3);
1146 outer_results[i] = r;
1149 if (n_chunks * 32 < vec_size)
1151 const size_type remainder = vec_size - n_chunks * 32;
1152 const size_type inner_chunks = remainder / 8;
1153 const size_type remainder_inner = remainder % 8;
1154 ResultType r0 = ResultType(), r1 = ResultType(), r2 = ResultType();
1155 switch (inner_chunks)
1174 for (
size_type j = 0; j < remainder_inner; ++j)
1176 outer_results[n_chunks++] = (r0 + r2) + r1;
1195 template <
typename Operation,
typename Number>
1200 Number *outer_results,
1201 std::bool_constant<true>)
1213 const size_type regular_chunks = vec_size / (32 * n_lanes);
1214 for (
size_type i = 0; i < regular_chunks; ++i)
1217 for (
unsigned int k = 0; k < 2; ++k)
1222 op.do_vectorized(
index + 2 * n_lanes);
1224 op.do_vectorized(
index + 3 * n_lanes);
1225 index += n_lanes * 4;
1228 r0 += op.do_vectorized(
index);
1229 r1 += op.do_vectorized(
index + n_lanes);
1230 r2 += op.do_vectorized(
index + 2 * n_lanes);
1231 r3 += op.do_vectorized(
index + 3 * n_lanes);
1233 r += (r0 + r1) + (r2 + r3);
1235 r.
store(&outer_results[i * n_lanes]);
1244 static_assert(n_lanes <= 16 && 16 % n_lanes == 0,
1245 "VectorizedArray::size() must be 1, 2, 4, 8, or 16");
1246 size_type n_chunks = regular_chunks * n_lanes;
1247 const size_type start_irregular = regular_chunks * n_lanes * 32;
1248 if (start_irregular < vec_size)
1252 const size_type remainder = vec_size - start_irregular;
1253 const size_type loop_length = remainder / (2 * n_lanes);
1254 for (
size_type j = 0; j < loop_length; ++j,
index += 2 * n_lanes)
1256 r0 += op.do_vectorized(
index);
1257 r1 += op.do_vectorized(
index + n_lanes);
1259 Number scalar_part = Number();
1260 size_type last = remainder % (2 * n_lanes);
1263 if (last >= n_lanes)
1265 r0 += op.do_vectorized(
index);
1269 for (
unsigned int i = 0; i < last; ++i)
1270 scalar_part += op(
index++);
1274 r0.
store(&outer_results[n_chunks]);
1275 outer_results[n_chunks] += scalar_part;
1279 n_chunks += n_lanes;
1290#ifdef DEAL_II_WITH_TBB
1319 template <
typename Operation,
typename ResultType>
1333 const unsigned int gs =
1368 for (
size_type i = range.begin(); i < range.end(); ++i)
1409 template <
typename Operation,
typename ResultType>
1415 const Operation &op,
1419 const std::shared_ptr<::parallel::internal::TBBPartitioner>
1422#ifdef DEAL_II_WITH_TBB
1430 Assert(partitioner.get() !=
nullptr,
1432 "Unexpected initialization of Vector that does "
1433 "not set the TBB partitioner to a usable state."));
1434 std::shared_ptr<tbb::affinity_partitioner> tbb_partitioner =
1435 partitioner->acquire_one_partitioner();
1453 partitioner->release_one_partitioner(tbb_partitioner);
1454 result = generic_functor.
do_sum();
1465 template <
typename Number,
typename Number2,
typename MemorySpace>
1470 const std::shared_ptr<::parallel::internal::TBBPartitioner> &
1473 const ::MemorySpace::MemorySpaceData<Number2, MemorySpace>
1478 std::is_same_v<MemorySpace, ::MemorySpace::Default> &&
1479 std::is_same_v<Number, Number2>,
1480 "For the Default MemorySpace Number and Number2 should be the same type");
1485 const std::shared_ptr<::parallel::internal::TBBPartitioner> &
1494 const std::shared_ptr<::parallel::internal::TBBPartitioner> &
1497 const ::MemorySpace::MemorySpaceData<Number, MemorySpace>
1504 const std::shared_ptr<::parallel::internal::TBBPartitioner> &
1507 const ::MemorySpace::MemorySpaceData<Number, MemorySpace>
1514 const std::shared_ptr<::parallel::internal::TBBPartitioner> &
1523 const std::shared_ptr<::parallel::internal::TBBPartitioner> &
1527 const ::MemorySpace::MemorySpaceData<Number, MemorySpace>
1534 const std::shared_ptr<::parallel::internal::TBBPartitioner> &
1539 const ::MemorySpace::MemorySpaceData<Number, MemorySpace>
1541 const ::MemorySpace::MemorySpaceData<Number, MemorySpace>
1548 const std::shared_ptr<::parallel::internal::TBBPartitioner> &
1552 const ::MemorySpace::MemorySpaceData<Number, MemorySpace>
1559 const std::shared_ptr<::parallel::internal::TBBPartitioner> &
1564 const ::MemorySpace::MemorySpaceData<Number, MemorySpace>
1571 const std::shared_ptr<::parallel::internal::TBBPartitioner> &
1577 const ::MemorySpace::MemorySpaceData<Number, MemorySpace>
1579 const ::MemorySpace::MemorySpaceData<Number, MemorySpace>
1586 const std::shared_ptr<::parallel::internal::TBBPartitioner> &
1595 const std::shared_ptr<::parallel::internal::TBBPartitioner> &
1598 const ::MemorySpace::MemorySpaceData<Number, MemorySpace>
1605 const std::shared_ptr<::parallel::internal::TBBPartitioner> &
1609 const ::MemorySpace::MemorySpaceData<Number, MemorySpace>
1616 const std::shared_ptr<::parallel::internal::TBBPartitioner> &
1621 const ::MemorySpace::MemorySpaceData<Number, MemorySpace>
1623 const ::MemorySpace::MemorySpaceData<Number, MemorySpace>
1630 const std::shared_ptr<::parallel::internal::TBBPartitioner> &
1633 const ::MemorySpace::MemorySpaceData<Number2, MemorySpace>
1640 template <
typename real_type>
1643 const std::shared_ptr<::parallel::internal::TBBPartitioner> &
1647 const ::MemorySpace::MemorySpaceData<Number, MemorySpace>
1654 const std::shared_ptr<::parallel::internal::TBBPartitioner> &
1657 const ::MemorySpace::MemorySpaceData<Number, MemorySpace>
1663 template <
typename real_type>
1666 const std::shared_ptr<::parallel::internal::TBBPartitioner> &
1674 template <
typename real_type>
1677 const std::shared_ptr<::parallel::internal::TBBPartitioner> &
1687 const std::shared_ptr<::parallel::internal::TBBPartitioner> &
1691 const ::MemorySpace::MemorySpaceData<Number, MemorySpace>
1693 const ::MemorySpace::MemorySpaceData<Number, MemorySpace>
1700 template <
typename MemorySpace2>
1703 const std::shared_ptr<::parallel::internal::TBBPartitioner> &
1707 const ::MemorySpace::MemorySpaceData<Number, MemorySpace2>
1715 template <
typename Number,
typename Number2>
1719 copy(
const std::shared_ptr<::parallel::internal::TBBPartitioner>
1720 &thread_loop_partitioner,
1722 const ::MemorySpace::
1723 MemorySpaceData<Number2, ::
MemorySpace::Host> &v_data,
1729 data.values.data());
1719 copy(
const std::shared_ptr<::parallel::internal::TBBPartitioner> {
…}
1734 set(
const std::shared_ptr<::parallel::internal::TBBPartitioner>
1735 &thread_loop_partitioner,
1734 set(
const std::shared_ptr<::parallel::internal::TBBPartitioner> {
…}
1748 const std::shared_ptr<::parallel::internal::TBBPartitioner>
1749 &thread_loop_partitioner,
1751 const ::MemorySpace::
1752 MemorySpaceData<Number, ::
MemorySpace::Host> &v_data,
1758 v_data.values.data());
1764 const std::shared_ptr<::parallel::internal::TBBPartitioner>
1765 &thread_loop_partitioner,
1767 const ::MemorySpace::
1768 MemorySpaceData<Number, ::
MemorySpace::Host> &v_data,
1774 v_data.values.data());
1780 const std::shared_ptr<::parallel::internal::TBBPartitioner>
1781 &thread_loop_partitioner,
1793 add_av(
const std::shared_ptr<::parallel::internal::TBBPartitioner>
1794 &thread_loop_partitioner,
1797 const ::MemorySpace::
1798 MemorySpaceData<Number, ::
MemorySpace::Host> &v_data,
1804 v_data.values.data(),
1793 add_av(
const std::shared_ptr<::parallel::internal::TBBPartitioner> {
…}
1811 const std::shared_ptr<::parallel::internal::TBBPartitioner>
1812 &thread_loop_partitioner,
1816 const ::MemorySpace::
1817 MemorySpaceData<Number, ::
MemorySpace::Host> &v_data,
1819 MemorySpaceData<Number, ::
MemorySpace::Host> &w_data,
1825 data.values.data(), v_data.values.data(), w_data.values.data(), a, b);
1831 const std::shared_ptr<::parallel::internal::TBBPartitioner>
1832 &thread_loop_partitioner,
1835 const ::MemorySpace::
1836 MemorySpaceData<Number, ::
MemorySpace::Host> &v_data,
1842 v_data.values.data(),
1849 const std::shared_ptr<::parallel::internal::TBBPartitioner>
1850 &thread_loop_partitioner,
1854 const ::MemorySpace::
1855 MemorySpaceData<Number, ::
MemorySpace::Host> &v_data,
1861 v_data.values.data(),
1869 const std::shared_ptr<::parallel::internal::TBBPartitioner>
1870 &thread_loop_partitioner,
1875 const ::MemorySpace::
1876 MemorySpaceData<Number, ::
MemorySpace::Host> &v_data,
1878 MemorySpaceData<Number, ::
MemorySpace::Host> &w_data,
1884 v_data.values.data(),
1885 w_data.values.data(),
1894 const std::shared_ptr<::parallel::internal::TBBPartitioner>
1895 &thread_loop_partitioner,
1897 const Number factor,
1903 data.values.data(), factor);
1908 scale(
const std::shared_ptr<::parallel::internal::TBBPartitioner>
1909 &thread_loop_partitioner,
1911 const ::MemorySpace::
1912 MemorySpaceData<Number, ::
MemorySpace::Host> &v_data,
1918 v_data.values.data());
1908 scale(
const std::shared_ptr<::parallel::internal::TBBPartitioner> {
…}
1923 equ_au(
const std::shared_ptr<::parallel::internal::TBBPartitioner>
1924 &thread_loop_partitioner,
1927 const ::MemorySpace::
1928 MemorySpaceData<Number, ::
MemorySpace::Host> &v_data,
1934 v_data.values.data(),
1923 equ_au(
const std::shared_ptr<::parallel::internal::TBBPartitioner> {
…}
1941 const std::shared_ptr<::parallel::internal::TBBPartitioner>
1942 &thread_loop_partitioner,
1946 const ::MemorySpace::
1947 MemorySpaceData<Number, ::
MemorySpace::Host> &v_data,
1949 MemorySpaceData<Number, ::
MemorySpace::Host> &w_data,
1955 data.values.data(), v_data.values.data(), w_data.values.data(), a, b);
1960 dot(
const std::shared_ptr<::parallel::internal::TBBPartitioner>
1961 &thread_loop_partitioner,
1963 const ::MemorySpace::
1964 MemorySpaceData<Number2, ::
MemorySpace::Host> &v_data,
1971 data.values.data(), v_data.values.data());
1973 dot, 0,
size, sum, thread_loop_partitioner);
1960 dot(
const std::shared_ptr<::parallel::internal::TBBPartitioner> {
…}
1979 template <
typename real_type>
1981 norm_2(
const std::shared_ptr<::parallel::internal::TBBPartitioner>
1982 &thread_loop_partitioner,
1981 norm_2(
const std::shared_ptr<::parallel::internal::TBBPartitioner> {
…}
1995 const std::shared_ptr<::parallel::internal::TBBPartitioner>
1996 &thread_loop_partitioner,
1998 const ::MemorySpace::
2008 template <
typename real_type>
2010 norm_1(
const std::shared_ptr<::parallel::internal::TBBPartitioner>
2011 &thread_loop_partitioner,
2022 optional_offset +
size,
2024 thread_loop_partitioner);
2010 norm_1(
const std::shared_ptr<::parallel::internal::TBBPartitioner> {
…}
2027 template <
typename real_type>
2029 norm_p(
const std::shared_ptr<::parallel::internal::TBBPartitioner>
2030 &thread_loop_partitioner,
2029 norm_p(
const std::shared_ptr<::parallel::internal::TBBPartitioner> {
…}
2044 const std::shared_ptr<::parallel::internal::TBBPartitioner>
2045 &thread_loop_partitioner,
2048 const ::MemorySpace::
2049 MemorySpaceData<Number, ::
MemorySpace::Host> &v_data,
2051 MemorySpaceData<Number, ::
MemorySpace::Host> &w_data,
2058 v_data.values.data(),
2059 w_data.values.data(),
2066 template <
typename MemorySpace2>
2069 const std::shared_ptr<::parallel::internal::TBBPartitioner>
2070 &thread_loop_partitioner,
2073 const ::MemorySpace::MemorySpaceData<Number, MemorySpace2>
2079 std::is_same_v<MemorySpace2, ::MemorySpace::Host>,
2096 template <
typename MemorySpace2>
2099 const std::shared_ptr<::parallel::internal::TBBPartitioner>
2103 const ::MemorySpace::MemorySpaceData<Number, MemorySpace2>
2109 std::is_same_v<MemorySpace2, ::MemorySpace::Default>,
2115 Kokkos::subview(
data.values,
2116 Kokkos::pair<size_type, size_type>(0,
size)),
2117 Kokkos::subview(v_data.values,
2118 Kokkos::pair<size_type, size_type>(0,
size)));
2129 template <
typename Number>
2134 const std::shared_ptr<::parallel::internal::TBBPartitioner> &,
2136 const ::MemorySpace::
2137 MemorySpaceData<Number, ::
MemorySpace::Default> &v_data,
2143 Kokkos::subview(
data.values,
2144 Kokkos::pair<size_type, size_type>(0,
size)),
2145 Kokkos::subview(v_data.values,
2146 Kokkos::pair<size_type, size_type>(0,
size)));
2150 set(
const std::shared_ptr<::parallel::internal::TBBPartitioner> &,
2158 Kokkos::subview(
data.values,
2159 Kokkos::pair<size_type, size_type>(0,
size)),
2150 set(
const std::shared_ptr<::parallel::internal::TBBPartitioner> &, {
…}
2165 const std::shared_ptr<::parallel::internal::TBBPartitioner> &,
2167 const ::MemorySpace::
2168 MemorySpaceData<Number, ::
MemorySpace::Default> &v_data,
2173 auto exec = typename ::MemorySpace::Default::kokkos_space::
2175 Kokkos::parallel_for(
2177 Kokkos::RangePolicy<
2178 ::MemorySpace::Default::kokkos_space::execution_space>(
2180 KOKKOS_LAMBDA(
int i) {
data.values(i) += v_data.values(i); });
2186 const std::shared_ptr<::parallel::internal::TBBPartitioner> &,
2188 const ::MemorySpace::
2189 MemorySpaceData<Number, ::
MemorySpace::Default> &v_data,
2194 auto exec = typename ::MemorySpace::Default::kokkos_space::
2196 Kokkos::parallel_for(
2197 "::subtract_vector",
2198 Kokkos::RangePolicy<
2199 ::MemorySpace::Default::kokkos_space::execution_space>(
2201 KOKKOS_LAMBDA(
size_type i) {
data.values(i) -= v_data.values(i); });
2207 const std::shared_ptr<::parallel::internal::TBBPartitioner> &,
2214 auto exec = typename ::MemorySpace::Default::kokkos_space::
2216 Kokkos::parallel_for(
2218 Kokkos::RangePolicy<
2219 ::MemorySpace::Default::kokkos_space::execution_space>(
2227 const std::shared_ptr<::parallel::internal::TBBPartitioner> &,
2230 const ::MemorySpace::
2231 MemorySpaceData<Number, ::
MemorySpace::Default> &v_data,
2236 auto exec = typename ::MemorySpace::Default::kokkos_space::
2238 Kokkos::parallel_for(
2240 Kokkos::RangePolicy<
2241 ::MemorySpace::Default::kokkos_space::execution_space>(
2244 data.values(i) += a * v_data.values(i);
2251 const std::shared_ptr<::parallel::internal::TBBPartitioner> &,
2255 const ::MemorySpace::
2256 MemorySpaceData<Number, ::
MemorySpace::Default> &v_data,
2258 MemorySpaceData<Number, ::
MemorySpace::Default> &w_data,
2263 auto exec = typename ::MemorySpace::Default::kokkos_space::
2265 Kokkos::parallel_for(
2267 Kokkos::RangePolicy<
2268 ::MemorySpace::Default::kokkos_space::execution_space>(
2271 data.values(i) += a * v_data.values(i) + b * w_data.values(i);
2278 const std::shared_ptr<::parallel::internal::TBBPartitioner> &,
2281 const ::MemorySpace::
2282 MemorySpaceData<Number, ::
MemorySpace::Default> &v_data,
2287 auto exec = typename ::MemorySpace::Default::kokkos_space::
2289 Kokkos::parallel_for(
2291 Kokkos::RangePolicy<
2292 ::MemorySpace::Default::kokkos_space::execution_space>(
2295 data.values(i) = x *
data.values(i) + v_data.values(i);
2302 const std::shared_ptr<::parallel::internal::TBBPartitioner> &,
2306 const ::MemorySpace::
2307 MemorySpaceData<Number, ::
MemorySpace::Default> &v_data,
2312 auto exec = typename ::MemorySpace::Default::kokkos_space::
2314 Kokkos::parallel_for(
2316 Kokkos::RangePolicy<
2317 ::MemorySpace::Default::kokkos_space::execution_space>(
2320 data.values(i) = x *
data.values(i) + a * v_data.values(i);
2327 const std::shared_ptr<::parallel::internal::TBBPartitioner> &,
2332 const ::MemorySpace::
2333 MemorySpaceData<Number, ::
MemorySpace::Default> &v_data,
2335 MemorySpaceData<Number, ::
MemorySpace::Default> &w_data,
2340 auto exec = typename ::MemorySpace::Default::kokkos_space::
2342 Kokkos::parallel_for(
2344 Kokkos::RangePolicy<
2345 ::MemorySpace::Default::kokkos_space::execution_space>(
2349 x *
data.values(i) + a * v_data.values(i) + b * w_data.values(i);
2356 const std::shared_ptr<::parallel::internal::TBBPartitioner> &,
2358 const Number factor,
2363 auto exec = typename ::MemorySpace::Default::kokkos_space::
2365 Kokkos::parallel_for(
2366 "::multiply_factor",
2367 Kokkos::RangePolicy<
2368 ::MemorySpace::Default::kokkos_space::execution_space>(
2376 const std::shared_ptr<::parallel::internal::TBBPartitioner> &,
2378 const ::MemorySpace::
2379 MemorySpaceData<Number, ::
MemorySpace::Default> &v_data,
2384 auto exec = typename ::MemorySpace::Default::kokkos_space::
2386 Kokkos::parallel_for(
2388 Kokkos::RangePolicy<
2389 ::MemorySpace::Default::kokkos_space::execution_space>(
2391 KOKKOS_LAMBDA(
size_type i) {
data.values(i) *= v_data.values(i); });
2397 const std::shared_ptr<::parallel::internal::TBBPartitioner> &,
2400 const ::MemorySpace::
2401 MemorySpaceData<Number, ::
MemorySpace::Default> &v_data,
2406 auto exec = typename ::MemorySpace::Default::kokkos_space::
2408 Kokkos::parallel_for(
2410 Kokkos::RangePolicy<
2411 ::MemorySpace::Default::kokkos_space::execution_space>(
2414 data.values(i) = a * v_data.values(i);
2421 const std::shared_ptr<::parallel::internal::TBBPartitioner> &,
2425 const ::MemorySpace::
2426 MemorySpaceData<Number, ::
MemorySpace::Default> &v_data,
2428 MemorySpaceData<Number, ::
MemorySpace::Default> &w_data,
2433 auto exec = typename ::MemorySpace::Default::kokkos_space::
2435 Kokkos::parallel_for(
2437 Kokkos::RangePolicy<
2438 ::MemorySpace::Default::kokkos_space::execution_space>(
2441 data.values(i) = a * v_data.values(i) + b * w_data.values(i);
2447 dot(
const std::shared_ptr<::parallel::internal::TBBPartitioner> &,
2449 const ::MemorySpace::
2450 MemorySpaceData<Number, ::
MemorySpace::Default> &v_data,
2457 auto exec = typename ::MemorySpace::Default::kokkos_space::
2459 Kokkos::parallel_reduce(
2461 Kokkos::RangePolicy<
2462 ::MemorySpace::Default::kokkos_space::execution_space>(
2464 KOKKOS_LAMBDA(
size_type i, Number & update) {
2465 update +=
data.values(i) * v_data.values(i);
2447 dot(
const std::shared_ptr<::parallel::internal::TBBPartitioner> &, {
…}
2473 template <
typename real_type>
2475 norm_2(
const std::shared_ptr<::parallel::internal::TBBPartitioner>
2476 &thread_loop_partitioner,
2475 norm_2(
const std::shared_ptr<::parallel::internal::TBBPartitioner> {
…}
2487 const std::shared_ptr<::parallel::internal::TBBPartitioner> &,
2489 const ::MemorySpace::
2494 auto exec = typename ::MemorySpace::Default::kokkos_space::
2496 Kokkos::parallel_reduce(
2498 Kokkos::RangePolicy<
2499 ::MemorySpace::Default::kokkos_space::execution_space>(
2501 KOKKOS_LAMBDA(
size_type i, Number & update) {
2502 update +=
data.values(i);
2510 template <
typename real_type>
2513 const std::shared_ptr<::parallel::internal::TBBPartitioner> &,
2521 auto exec = typename ::MemorySpace::Default::kokkos_space::
2523 Kokkos::parallel_reduce(
2525 Kokkos::RangePolicy<
2526 ::MemorySpace::Default::kokkos_space::execution_space>(
2527 exec, optional_offset, optional_offset +
size),
2528 KOKKOS_LAMBDA(
size_type i, Number & update) {
2529#if DEAL_II_KOKKOS_VERSION_GTE(3, 7, 0)
2530 update += Kokkos::abs(
data.values(i));
2532 update += Kokkos::Experimental::fabs(
data.values(i));
2538 template <
typename real_type>
2541 const std::shared_ptr<::parallel::internal::TBBPartitioner> &,
2549 auto exec = typename ::MemorySpace::Default::kokkos_space::
2551 Kokkos::parallel_reduce(
2553 Kokkos::RangePolicy<
2554 ::MemorySpace::Default::kokkos_space::execution_space>(
2556 KOKKOS_LAMBDA(
size_type i, Number & update) {
2557#if DEAL_II_KOKKOS_VERSION_GTE(3, 7, 0)
2558 update += Kokkos::pow(Kokkos::abs(
data.values(i)), exp);
2560 update += Kokkos::Experimental::pow(
2561 Kokkos::Experimental::fabs(
data.values(i)), exp);
2569 const std::shared_ptr<::parallel::internal::TBBPartitioner> &,
2572 const ::MemorySpace::
2573 MemorySpaceData<Number, ::
MemorySpace::Default> &v_data,
2575 MemorySpaceData<Number, ::
MemorySpace::Default> &w_data,
2582 auto exec = typename ::MemorySpace::Default::kokkos_space::
2584 Kokkos::parallel_reduce(
2586 Kokkos::RangePolicy<
2587 ::MemorySpace::Default::kokkos_space::execution_space>(
2589 KOKKOS_LAMBDA(
size_type i, Number & update) {
2590 data.values(i) += a * v_data.values(i);
2600 template <
typename MemorySpace2>
2603 const std::shared_ptr<::parallel::internal::TBBPartitioner>
2604 &thread_loop_partitioner,
2607 const ::MemorySpace::MemorySpaceData<Number, MemorySpace2>
2613 std::is_same_v<MemorySpace2, ::MemorySpace::Default>,
2630 template <
typename MemorySpace2>
2633 const std::shared_ptr<::parallel::internal::TBBPartitioner>
2637 const ::MemorySpace::MemorySpaceData<Number, MemorySpace2>
2643 std::is_same_v<MemorySpace2, ::MemorySpace::Host>,
2649 Kokkos::subview(
data.values,
2650 Kokkos::pair<size_type, size_type>(0,
size)),
2651 Kokkos::subview(v_data.values,
2652 Kokkos::pair<size_type, size_type>(0,
size)));
45 namespace VectorOperations {
…}
static unsigned int n_threads()
static constexpr std::size_t size()
void store(OtherNumber *ptr) const
void load(const OtherNumber *ptr)
#define DEAL_II_ALWAYS_INLINE
#define DEAL_II_OPENMP_SIMD_PRAGMA
#define DEAL_II_NAMESPACE_OPEN
#define DEAL_II_NAMESPACE_CLOSE
#define DEAL_II_FALLTHROUGH
static ::ExceptionBase & ExcNotImplemented()
#define Assert(cond, exc)
#define AssertIsFinite(number)
#define AssertDimension(dim1, dim2)
#define AssertIndexRange(index, range)
static ::ExceptionBase & ExcInternalError()
static ::ExceptionBase & ExcMessage(std::string arg1)
#define AssertThrow(cond, exc)
std::vector< index_type > data
unsigned int minimum_parallel_grain_size
void accumulate_recursive(const Operation &op, const size_type first, const size_type last, ResultType &result)
bool is_non_negative(const T &t)
size_type do_accumulate(const Operation op, const size_type vec_size, const size_type start_index, ResultType *outer_results, std::bool_constant< false >)
void parallel_reduce(const Operation &op, const size_type start, const size_type end, ResultType &result, const std::shared_ptr<::parallel::internal::TBBPartitioner > &partitioner)
void copy(const T *begin, const T *end, U *dest)
void parallel_for(Functor &functor, const size_type start, const size_type end, const std::shared_ptr<::parallel::internal::TBBPartitioner > &partitioner)
const unsigned int vector_accumulation_recursion_threshold
types::global_dof_index size_type
void parallel_for(Iterator x_begin, Iterator x_end, const Functor &functor, const unsigned int grainsize)
::VectorizedArray< Number, width > min(const ::VectorizedArray< Number, width > &, const ::VectorizedArray< Number, width > &)
::VectorizedArray< Number, width > pow(const ::VectorizedArray< Number, width > &, const Number p)
::VectorizedArray< Number, width > abs(const ::VectorizedArray< Number, width > &)
unsigned int global_dof_index
static const bool vectorizes
AddAndDot(Number *const X, const Number *const V, const Number *const W, const Number a)
Number operator()(const size_type i) const
VectorizedArray< Number > do_vectorized(const size_type i) const
Dot(const Number *const X, const Number2 *const Y)
static constexpr bool vectorizes
Number operator()(const size_type i) const
VectorizedArray< Number > do_vectorized(const size_type i) const
Number operator()(const size_type i) const
VectorizedArray< Number > do_vectorized(const size_type i) const
MeanValue(const Number *X)
static const bool vectorizes
RealType operator()(const size_type i) const
static const bool vectorizes
VectorizedArray< Number > do_vectorized(const size_type i) const
Norm2(const Number *const X)
RealType operator()(const size_type i) const
static const bool vectorizes
VectorizedArray< Number > do_vectorized(const size_type i) const
RealType operator()(const size_type i) const
NormP(const Number *X, RealType p)
VectorizedArray< Number > do_vectorized(const size_type i) const
static const bool vectorizes
void operator()(const tbb::blocked_range< size_type > &range) const
TBBForFunctor(Functor &functor, const size_type start, const size_type end)
static const unsigned int threshold_array_allocate
TBBReduceFunctor(const Operation &op, const size_type start, const size_type end)
ResultType small_array[threshold_array_allocate]
ResultType do_sum() const
void operator()(const tbb::blocked_range< size_type > &range) const
std::vector< ResultType > large_array
Vector_copy(const OtherNumber *const src, Number *const dst)
void operator()(const size_type begin, const size_type end) const
const OtherNumber *const src
Vector_set(const Number value, Number *const dst)
void operator()(const size_type begin, const size_type end) const
Vectorization_add_av(Number *const val, const Number *const v_val, const Number factor)
void operator()(const size_type begin, const size_type end) const
const Number *const v_val
const Number stored_factor
Vectorization_add_avpbw(Number *const val, const Number *const v_val, const Number *const w_val, const Number a, const Number b)
void operator()(const size_type begin, const size_type end) const
const Number *const w_val
const Number *const v_val
void operator()(const size_type begin, const size_type end) const
const Number stored_factor
Vectorization_add_factor(Number *const val, const Number factor)
void operator()(const size_type begin, const size_type end) const
const Number *const v_val
Vectorization_add_v(Number *const val, const Number *const v_val)
const Number *const u_val
Vectorization_equ_au(Number *const val, const Number *const u_val, const Number a)
void operator()(const size_type begin, const size_type end) const
Vectorization_equ_aubv(Number *const val, const Number *const u_val, const Number *const v_val, const Number a, const Number b)
const Number *const u_val
void operator()(const size_type begin, const size_type end) const
const Number *const v_val
Vectorization_equ_aubvcw(Number *val, const Number *u_val, const Number *v_val, const Number *w_val, const Number a, const Number b, const Number c)
const Number *const w_val
const Number *const v_val
const Number *const u_val
void operator()(const size_type begin, const size_type end) const
Vectorization_multiply_factor(Number *const val, const Number factor)
const Number stored_factor
void operator()(const size_type begin, const size_type end) const
void operator()(const size_type begin, const size_type end) const
const Number *const a_val
Vectorization_ratio(Number *val, const Number *a_val, const Number *b_val)
const Number *const b_val
Vectorization_sadd_xav(Number *val, const Number *const v_val, const Number a, const Number x)
const Number *const v_val
void operator()(const size_type begin, const size_type end) const
const Number *const v_val
const Number *const w_val
void operator()(const size_type begin, const size_type end) const
Vectorization_sadd_xavbw(Number *val, const Number *v_val, const Number *w_val, Number x, Number a, Number b)
Vectorization_sadd_xv(Number *const val, const Number *const v_val, const Number x)
void operator()(const size_type begin, const size_type end) const
const Number *const v_val
const Number *const v_val
void operator()(const size_type begin, const size_type end) const
Vectorization_scale(Number *const val, const Number *const v_val)
Vectorization_subtract_v(Number *val, const Number *const v_val)
void operator()(const size_type begin, const size_type end) const
const Number *const v_val
static void set(const std::shared_ptr<::parallel::internal::TBBPartitioner > &thread_loop_partitioner, const size_type size, const Number s, ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Host > &data)
static void norm_2(const std::shared_ptr<::parallel::internal::TBBPartitioner > &thread_loop_partitioner, const size_type size, real_type &sum, ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Host > &data)
static void norm_p(const std::shared_ptr<::parallel::internal::TBBPartitioner > &thread_loop_partitioner, const size_type size, real_type &sum, const real_type p, ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Host > &data)
static void import_elements(const std::shared_ptr<::parallel::internal::TBBPartitioner > &, const size_type size, VectorOperation::values operation, const ::MemorySpace::MemorySpaceData< Number, MemorySpace2 > &v_data, ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Host > &data, std::enable_if_t< std::is_same_v< MemorySpace2, ::MemorySpace::Default >, int >=0)
static void add_avpbw(const std::shared_ptr<::parallel::internal::TBBPartitioner > &thread_loop_partitioner, const size_type size, const Number a, const Number b, const ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Host > &v_data, const ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Host > &w_data, ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Host > &data)
static void sadd_xav(const std::shared_ptr<::parallel::internal::TBBPartitioner > &thread_loop_partitioner, const size_type size, const Number x, const Number a, const ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Host > &v_data, ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Host > &data)
static void equ_au(const std::shared_ptr<::parallel::internal::TBBPartitioner > &thread_loop_partitioner, const size_type size, const Number a, const ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Host > &v_data, ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Host > &data)
static void scale(const std::shared_ptr<::parallel::internal::TBBPartitioner > &thread_loop_partitioner, const size_type size, const ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Host > &v_data, ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Host > &data)
static Number mean_value(const std::shared_ptr<::parallel::internal::TBBPartitioner > &thread_loop_partitioner, const size_type size, const ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Host > &data)
static void add_factor(const std::shared_ptr<::parallel::internal::TBBPartitioner > &thread_loop_partitioner, const size_type size, Number a, ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Host > &data)
static void sadd_xv(const std::shared_ptr<::parallel::internal::TBBPartitioner > &thread_loop_partitioner, const size_type size, const Number x, const ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Host > &v_data, ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Host > &data)
static void copy(const std::shared_ptr<::parallel::internal::TBBPartitioner > &thread_loop_partitioner, const size_type size, const ::MemorySpace::MemorySpaceData< Number2, ::MemorySpace::Host > &v_data, ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Host > &data)
static void import_elements(const std::shared_ptr<::parallel::internal::TBBPartitioner > &thread_loop_partitioner, const size_type size, VectorOperation::values operation, const ::MemorySpace::MemorySpaceData< Number, MemorySpace2 > &v_data, ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Host > &data, std::enable_if_t< std::is_same_v< MemorySpace2, ::MemorySpace::Host >, int >=0)
static void add_av(const std::shared_ptr<::parallel::internal::TBBPartitioner > &thread_loop_partitioner, const size_type size, const Number a, const ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Host > &v_data, ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Host > &data)
static void add_vector(const std::shared_ptr<::parallel::internal::TBBPartitioner > &thread_loop_partitioner, const size_type size, const ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Host > &v_data, ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Host > &data)
static void sadd_xavbw(const std::shared_ptr<::parallel::internal::TBBPartitioner > &thread_loop_partitioner, const size_type size, const Number x, const Number a, const Number b, const ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Host > &v_data, const ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Host > &w_data, ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Host > &data)
static void subtract_vector(const std::shared_ptr<::parallel::internal::TBBPartitioner > &thread_loop_partitioner, const size_type size, const ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Host > &v_data, ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Host > &data)
static Number add_and_dot(const std::shared_ptr<::parallel::internal::TBBPartitioner > &thread_loop_partitioner, const size_type size, const Number a, const ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Host > &v_data, const ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Host > &w_data, ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Host > &data)
static Number dot(const std::shared_ptr<::parallel::internal::TBBPartitioner > &thread_loop_partitioner, const size_type size, const ::MemorySpace::MemorySpaceData< Number2, ::MemorySpace::Host > &v_data, ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Host > &data)
static void equ_aubv(const std::shared_ptr<::parallel::internal::TBBPartitioner > &thread_loop_partitioner, const size_type size, const Number a, const Number b, const ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Host > &v_data, const ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Host > &w_data, ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Host > &data)
static void norm_1(const std::shared_ptr<::parallel::internal::TBBPartitioner > &thread_loop_partitioner, const size_type size, real_type &sum, ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Host > &data, const size_type optional_offset=0)
static void multiply_factor(const std::shared_ptr<::parallel::internal::TBBPartitioner > &thread_loop_partitioner, const size_type size, const Number factor, ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Host > &data)
static void subtract_vector(const std::shared_ptr<::parallel::internal::TBBPartitioner > &, const size_type size, const ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Default > &v_data, ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Default > &data)
static void sadd_xav(const std::shared_ptr<::parallel::internal::TBBPartitioner > &, const size_type size, const Number x, const Number a, const ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Default > &v_data, ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Default > &data)
static Number dot(const std::shared_ptr<::parallel::internal::TBBPartitioner > &, const size_type size, const ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Default > &v_data, ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Default > &data)
static void add_av(const std::shared_ptr<::parallel::internal::TBBPartitioner > &, const size_type size, const Number a, const ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Default > &v_data, ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Default > &data)
static void copy(const std::shared_ptr<::parallel::internal::TBBPartitioner > &, const size_type size, const ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Default > &v_data, ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Default > &data)
static Number add_and_dot(const std::shared_ptr<::parallel::internal::TBBPartitioner > &, const size_type size, const Number a, const ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Default > &v_data, const ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Default > &w_data, ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Default > &data)
static void sadd_xavbw(const std::shared_ptr<::parallel::internal::TBBPartitioner > &, const size_type size, const Number x, const Number a, const Number b, const ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Default > &v_data, const ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Default > &w_data, ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Default > &data)
static Number mean_value(const std::shared_ptr<::parallel::internal::TBBPartitioner > &, const size_type size, const ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Default > &data)
static void norm_p(const std::shared_ptr<::parallel::internal::TBBPartitioner > &, const size_type size, real_type &sum, real_type exp, ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Default > &data)
static void add_factor(const std::shared_ptr<::parallel::internal::TBBPartitioner > &, const size_type size, Number a, ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Default > &data)
static void add_vector(const std::shared_ptr<::parallel::internal::TBBPartitioner > &, const size_type size, const ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Default > &v_data, ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Default > &data)
static void norm_1(const std::shared_ptr<::parallel::internal::TBBPartitioner > &, const size_type size, real_type &sum, ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Default > &data, const size_type optional_offset=0)
static void add_avpbw(const std::shared_ptr<::parallel::internal::TBBPartitioner > &, const size_type size, const Number a, const Number b, const ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Default > &v_data, const ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Default > &w_data, ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Default > &data)
static void set(const std::shared_ptr<::parallel::internal::TBBPartitioner > &, const size_type size, const Number s, ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Default > &data)
static void norm_2(const std::shared_ptr<::parallel::internal::TBBPartitioner > &thread_loop_partitioner, const size_type size, real_type &sum, ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Default > &data)
static void import_elements(const std::shared_ptr<::parallel::internal::TBBPartitioner > &, const size_type size, VectorOperation::values operation, const ::MemorySpace::MemorySpaceData< Number, MemorySpace2 > &v_data, ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Default > &data, std::enable_if_t< std::is_same_v< MemorySpace2, ::MemorySpace::Host >, int >=0)
static void sadd_xv(const std::shared_ptr<::parallel::internal::TBBPartitioner > &, const size_type size, const Number x, const ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Default > &v_data, ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Default > &data)
static void multiply_factor(const std::shared_ptr<::parallel::internal::TBBPartitioner > &, const size_type size, const Number factor, ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Default > &data)
static void scale(const std::shared_ptr<::parallel::internal::TBBPartitioner > &, const size_type size, const ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Default > &v_data, ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Default > &data)
static void equ_aubv(const std::shared_ptr<::parallel::internal::TBBPartitioner > &, const size_type size, const Number a, const Number b, const ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Default > &v_data, const ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Default > &w_data, ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Default > &data)
static void import_elements(const std::shared_ptr<::parallel::internal::TBBPartitioner > &thread_loop_partitioner, const size_type size, VectorOperation::values operation, const ::MemorySpace::MemorySpaceData< Number, MemorySpace2 > &v_data, ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Default > &data, std::enable_if_t< std::is_same_v< MemorySpace2, ::MemorySpace::Default >, int >=0)
static void equ_au(const std::shared_ptr<::parallel::internal::TBBPartitioner > &, const size_type size, const Number a, const ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Default > &v_data, ::MemorySpace::MemorySpaceData< Number, ::MemorySpace::Default > &data)
static Number mean_value(const std::shared_ptr<::parallel::internal::TBBPartitioner > &, const size_type, const ::MemorySpace::MemorySpaceData< Number, MemorySpace > &)
static void equ_au(const std::shared_ptr<::parallel::internal::TBBPartitioner > &, const size_type, const Number, const ::MemorySpace::MemorySpaceData< Number, MemorySpace > &, ::MemorySpace::MemorySpaceData< Number, MemorySpace > &)
static void add_avpbw(const std::shared_ptr<::parallel::internal::TBBPartitioner > &, const size_type, const Number, const Number, const ::MemorySpace::MemorySpaceData< Number, MemorySpace > &, const ::MemorySpace::MemorySpaceData< Number, MemorySpace > &, ::MemorySpace::MemorySpaceData< Number, MemorySpace > &)
static void sadd_xv(const std::shared_ptr<::parallel::internal::TBBPartitioner > &, const size_type, const Number, const ::MemorySpace::MemorySpaceData< Number, MemorySpace > &, ::MemorySpace::MemorySpaceData< Number, MemorySpace > &)
static void add_factor(const std::shared_ptr<::parallel::internal::TBBPartitioner > &, const size_type, Number, ::MemorySpace::MemorySpaceData< Number, MemorySpace > &)
static void norm_2(const std::shared_ptr<::parallel::internal::TBBPartitioner > &, const size_type, real_type &, const ::MemorySpace::MemorySpaceData< Number, MemorySpace > &, ::MemorySpace::MemorySpaceData< Number, MemorySpace > &)
static void add_vector(const std::shared_ptr<::parallel::internal::TBBPartitioner > &, const size_type, const ::MemorySpace::MemorySpaceData< Number, MemorySpace > &, ::MemorySpace::MemorySpaceData< Number, MemorySpace > &)
static void scale(const std::shared_ptr<::parallel::internal::TBBPartitioner > &, const size_type, const ::MemorySpace::MemorySpaceData< Number, MemorySpace > &, ::MemorySpace::MemorySpaceData< Number, MemorySpace > &)
static void subtract_vector(const std::shared_ptr<::parallel::internal::TBBPartitioner > &, const size_type, const ::MemorySpace::MemorySpaceData< Number, MemorySpace > &, ::MemorySpace::MemorySpaceData< Number, MemorySpace > &)
static void sadd_xavbw(const std::shared_ptr<::parallel::internal::TBBPartitioner > &, const size_type, const Number, const Number, const Number, const ::MemorySpace::MemorySpaceData< Number, MemorySpace > &, const ::MemorySpace::MemorySpaceData< Number, MemorySpace > &, ::MemorySpace::MemorySpaceData< Number, MemorySpace > &)
static Number dot(const std::shared_ptr<::parallel::internal::TBBPartitioner > &, const size_type, const ::MemorySpace::MemorySpaceData< Number2, MemorySpace > &, ::MemorySpace::MemorySpaceData< Number, MemorySpace > &)
static Number add_and_dot(const std::shared_ptr<::parallel::internal::TBBPartitioner > &, const size_type, const Number, const ::MemorySpace::MemorySpaceData< Number, MemorySpace > &, const ::MemorySpace::MemorySpaceData< Number, MemorySpace > &, ::MemorySpace::MemorySpaceData< Number, MemorySpace > &)
static void sadd_xav(const std::shared_ptr<::parallel::internal::TBBPartitioner > &, const size_type, const Number, const Number, const ::MemorySpace::MemorySpaceData< Number, MemorySpace > &, ::MemorySpace::MemorySpaceData< Number, MemorySpace > &)
static void import_elements(const std::shared_ptr<::parallel::internal::TBBPartitioner > &, const size_type, VectorOperation::values, const ::MemorySpace::MemorySpaceData< Number, MemorySpace2 > &, ::MemorySpace::MemorySpaceData< Number, MemorySpace > &)
static void copy(const std::shared_ptr<::parallel::internal::TBBPartitioner > &, const size_type, const ::MemorySpace::MemorySpaceData< Number2, MemorySpace > &, ::MemorySpace::MemorySpaceData< Number, MemorySpace > &)
static void norm_1(const std::shared_ptr<::parallel::internal::TBBPartitioner > &, const size_type, real_type &, Number *, Number *)
static void add_av(const std::shared_ptr<::parallel::internal::TBBPartitioner > &, const size_type, const Number, const ::MemorySpace::MemorySpaceData< Number, MemorySpace > &, ::MemorySpace::MemorySpaceData< Number, MemorySpace > &)
static void multiply_factor(const std::shared_ptr<::parallel::internal::TBBPartitioner > &, const size_type, const Number, ::MemorySpace::MemorySpaceData< Number, MemorySpace > &)
static void norm_p(const std::shared_ptr<::parallel::internal::TBBPartitioner > &, const size_type, real_type &, real_type, ::MemorySpace::MemorySpaceData< Number, MemorySpace > &)
static void equ_aubv(const std::shared_ptr<::parallel::internal::TBBPartitioner > &, const size_type, const Number, const Number, const ::MemorySpace::MemorySpaceData< Number, MemorySpace > &, const ::MemorySpace::MemorySpaceData< Number, MemorySpace > &, ::MemorySpace::MemorySpaceData< Number, MemorySpace > &)
static void set(const std::shared_ptr<::parallel::internal::TBBPartitioner > &, const size_type, const Number, ::MemorySpace::MemorySpaceData< Number, MemorySpace > &)
static real_type abs(const number &x)
static constexpr real_type abs_square(const number &x)