Cabana 0.8.0-dev
 
Loading...
Searching...
No Matches
Cabana_Sort.hpp File Reference

Sorting and binning built on Kokkos BinSort. More...

#include <Cabana_AoSoA.hpp>
#include <Cabana_DeepCopy.hpp>
#include <Cabana_Slice.hpp>
#include <Cabana_Utils.hpp>
#include <Kokkos_Core.hpp>
#include <Kokkos_Profiling_ScopedRegion.hpp>
#include <Kokkos_Sort.hpp>
#include <type_traits>
Include dependency graph for Cabana_Sort.hpp:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

class  Cabana::BinningData< MemorySpace >
 Data describing the bin sizes and offsets resulting from a binning operation. More...
 
struct  Cabana::is_binning_data< const BinningData< MemorySpace > >
 BinningData static type checker. More...
 

Namespaces

namespace  Cabana
 Core: particle data structures and algorithms.
 

Functions

template<class KeyViewType, class Comparator, class ExecutionSpace = typename KeyViewType::execution_space>
auto Cabana::Impl::kokkosBinSort (KeyViewType keys, Comparator comp, const bool sort_within_bins, const std::size_t begin, const std::size_t end)
 
template<class KeyViewType, class ExecutionSpace = typename KeyViewType::execution_space>
Kokkos::MinMaxScalar< typename KeyViewType::non_const_value_type > Cabana::Impl::keyMinMax (KeyViewType keys, const std::size_t begin, const std::size_t end)
 Given a set of keys, find the minimum and maximum over the given range.
 
template<class KeyViewType, class ExecutionSpace = typename KeyViewType::execution_space>
auto Cabana::Impl::kokkosBinSort1d (KeyViewType keys, const int nbin, const bool sort_within_bins, const std::size_t begin, const std::size_t end)
 
template<class KeyViewType, class Comparator, class ExecutionSpace = typename KeyViewType::execution_space>
auto Cabana::sortByKeyWithComparator (KeyViewType keys, Comparator comp, const std::size_t begin, const std::size_t end, typename std::enable_if<(Kokkos::is_view< KeyViewType >::value), int >::type *=0)
 Sort an AoSoA over a subset of its range using a general comparator over the given Kokkos View of keys.
 
template<class KeyViewType, class Comparator, class ExecutionSpace = typename KeyViewType::execution_space>
auto Cabana::sortByKeyWithComparator (KeyViewType keys, Comparator comp, typename std::enable_if<(Kokkos::is_view< KeyViewType >::value), int >::type *=0)
 Sort an entire AoSoA using a general comparator over the given Kokkos View of keys.
 
template<class KeyViewType, class Comparator, class ExecutionSpace = typename KeyViewType::execution_space>
auto Cabana::binByKeyWithComparator (KeyViewType keys, Comparator comp, const std::size_t begin, const std::size_t end, typename std::enable_if<(Kokkos::is_view< KeyViewType >::value), int >::type *=0)
 Bin an AoSoA over a subset of its range using a general comparator over the given Kokkos View of keys.
 
template<class KeyViewType, class Comparator, class ExecutionSpace = typename KeyViewType::execution_space>
auto Cabana::binByKeyWithComparator (KeyViewType keys, Comparator comp, typename std::enable_if<(Kokkos::is_view< KeyViewType >::value), int >::type *=0)
 Bin an entire AoSoA using a general comparator over the given Kokkos View of keys.
 
template<class KeyViewType, class ExecutionSpace = typename KeyViewType::execution_space>
auto Cabana::sortByKey (KeyViewType keys, const std::size_t begin, const std::size_t end, typename std::enable_if<(Kokkos::is_view< KeyViewType >::value), int >::type *=0)
 Sort an AoSoA over a subset of its range based on the associated key values.
 
template<class KeyViewType, class ExecutionSpace = typename KeyViewType::execution_space>
auto Cabana::sortByKey (KeyViewType keys, typename std::enable_if<(Kokkos::is_view< KeyViewType >::value), int >::type *=0)
 Sort an entire AoSoA based on the associated key values.
 
template<class KeyViewType, class ExecutionSpace = typename KeyViewType::execution_space>
auto Cabana::binByKey (KeyViewType keys, const int nbin, const std::size_t begin, const std::size_t end, typename std::enable_if<(Kokkos::is_view< KeyViewType >::value), int >::type *=0)
 Bin an AoSoA over a subset of its range based on the associated key values and number of bins. The bins are evenly divided over the range of key values.
 
template<class KeyViewType, class ExecutionSpace = typename KeyViewType::execution_space>
auto Cabana::binByKey (KeyViewType keys, const int nbin, typename std::enable_if<(Kokkos::is_view< KeyViewType >::value), int >::type *=0)
 Bin an entire AoSoA based on the associated key values and number of bins. The bins are evenly divided over the range of key values.
 
template<class SliceType, class ExecutionSpace = typename SliceType::execution_space>
auto Cabana::sortByKey (SliceType slice, const std::size_t begin, const std::size_t end, typename std::enable_if<(is_slice< SliceType >::value), int >::type *=0)
 Sort an AoSoA over a subset of its range based on the associated slice of keys.
 
template<class SliceType, class ExecutionSpace = typename SliceType::execution_space>
auto Cabana::sortByKey (SliceType slice, typename std::enable_if<(is_slice< SliceType >::value), int >::type *=0)
 Sort an entire AoSoA based on the associated slice of keys.
 
template<class SliceType, class ExecutionSpace = typename SliceType::execution_space>
auto Cabana::binByKey (SliceType slice, const int nbin, const std::size_t begin, const std::size_t end, typename std::enable_if<(is_slice< SliceType >::value), int >::type *=0)
 Bin an AoSoA over a subset of its range based on the associated slice of keys.
 
template<class SliceType, class ExecutionSpace = typename SliceType::execution_space>
auto Cabana::binByKey (SliceType slice, const int nbin, typename std::enable_if<(is_slice< SliceType >::value), int >::type *=0)
 Bin an entire AoSoA based on the associated slice of keys.
 
template<class BinningDataType, class AoSoA_t, class ExecutionSpace = typename BinningDataType::execution_space>
void Cabana::permute (const BinningDataType &binning_data, AoSoA_t &aosoa, typename std::enable_if<(is_binning_data< BinningDataType >::value &&is_aosoa< AoSoA_t >::value), int >::type *=0)
 Given binning data permute an AoSoA.
 
template<class BinningDataType, class SliceType, class ExecutionSpace = typename BinningDataType::execution_space>
void Cabana::permute (const BinningDataType &binning_data, SliceType &slice, typename std::enable_if<(is_binning_data< BinningDataType >::value &&is_slice< SliceType >::value), int >::type *=0)
 Given binning data permute a slice.
 
template<class BinningDataType, class ViewType, class DeviceType = typename BinningDataType::device_type>
void Cabana::permute (const BinningDataType &binning_data, ViewType &view, typename std::enable_if<(is_binning_data< BinningDataType >::value &&Kokkos::is_view< ViewType >::value), int >::type *=0)
 Given binning data permute a View.
 

Detailed Description

Sorting and binning built on Kokkos BinSort.

Function Documentation

◆ kokkosBinSort()

template<class KeyViewType, class Comparator, class ExecutionSpace = typename KeyViewType::execution_space>
auto Cabana::Impl::kokkosBinSort ( KeyViewType keys,
Comparator comp,
const bool sort_within_bins,
const std::size_t begin,
const std::size_t end )

Create a permutation vector over a range subset using a comparator over the given Kokkos View of keys.

◆ kokkosBinSort1d()

template<class KeyViewType, class ExecutionSpace = typename KeyViewType::execution_space>
auto Cabana::Impl::kokkosBinSort1d ( KeyViewType keys,
const int nbin,
const bool sort_within_bins,
const std::size_t begin,
const std::size_t end )

Sort an AoSoA over a subset of its range using the given Kokkos View of keys.