|
| template<typename T , typename N , typename M = std::enable_if_t<std::is_integral_v<N>>> |
| T | amrex::Reduce::Sum (N n, T const *v, T init_val=0) |
| |
| template<typename T , typename N , typename F , typename M = std::enable_if_t<std::is_integral_v<N>>> |
| T | amrex::Reduce::Sum (N n, F const &f, T init_val=0) |
| |
| template<typename T , typename N , typename M = std::enable_if_t<std::is_integral_v<N>>> |
| T | amrex::Reduce::Min (N n, T const *v, T init_val=std::numeric_limits< T >::max()) |
| |
| template<typename T , typename N , typename F , typename M = std::enable_if_t<std::is_integral_v<N>>> |
| T | amrex::Reduce::Min (N n, F const &f, T init_val=std::numeric_limits< T >::max()) |
| |
| template<typename T , typename N , typename M = std::enable_if_t<std::is_integral_v<N>>> |
| T | amrex::Reduce::Max (N n, T const *v, T init_val=std::numeric_limits< T >::lowest()) |
| |
| template<typename T , typename N , typename F , typename M = std::enable_if_t<std::is_integral_v<N>>> |
| T | amrex::Reduce::Max (N n, F const &f, T init_val=std::numeric_limits< T >::lowest()) |
| |
| template<typename T , typename N , typename M = std::enable_if_t<std::is_integral_v<N>>> |
| std::pair< T, T > | amrex::Reduce::MinMax (N n, T const *v) |
| |
| template<typename T , typename N , typename F , typename M = std::enable_if_t<std::is_integral_v<N>>> |
| std::pair< T, T > | amrex::Reduce::MinMax (N n, F const &f) |
| |
| template<typename T , typename N , typename P , typename M = std::enable_if_t<std::is_integral_v<N>>> |
| bool | amrex::Reduce::AnyOf (N n, T const *v, P const &pred) |
| |
| template<typename P > |
| bool | amrex::Reduce::AnyOf (Box const &box, P const &pred) |
| |
| template<typename T , typename N , typename FIN , typename FOUT , typename TYPE , typename M = std::enable_if_t<std::is_integral_v<N> && (std::is_same<std::decay_t<TYPE>,Type::Inclusive>::value || std::is_same<std::decay_t<TYPE>,Type::Exclusive>::value)>> |
| T | amrex::Scan::PrefixSum (N n, FIN const &fin, FOUT const &fout, TYPE, RetSum a_ret_sum=retSum) |
| |
| template<typename N , typename T , typename M = std::enable_if_t<std::is_integral_v<N>>> |
| T | amrex::Scan::InclusiveSum (N n, T const *in, T *out, RetSum a_ret_sum=retSum) |
| | Inclusive sum.
|
| |
| template<typename N , typename T , typename M = std::enable_if_t<std::is_integral_v<N>>> |
| T | amrex::Scan::ExclusiveSum (N n, T const *in, T *out, RetSum a_ret_sum=retSum) |
| | Exclusive sum.
|
| |
| template<class InIter , class OutIter > |
| OutIter | amrex::Gpu::inclusive_scan (InIter begin, InIter end, OutIter result) |
| |
| template<class InIter , class OutIter > |
| OutIter | amrex::Gpu::exclusive_scan (InIter begin, InIter end, OutIter result) |
| |
Performance-portable reduction and scan operations in AMReX.
These interfaces provide reductions (e.g., sum, min, max) and scan operations (prefix sums) over index spaces and ranges on both CPUs and GPUs. They do not use MPI and operate on data local to the process.