42 template <
typename T,
typename Container,
class BinaryCompare>
44 template <
typename T,
typename StorageT,
typename U,
typename StorageU,
class BinaryCompare>
50 template <
typename HandleType,
class BinaryCompare>
52 BinaryCompare binary_compare,
53 viskores::cont::internal::radix::PSortTag)
61 using IterType =
typename std::decay<decltype(iter)>::type;
64 Sorter sorter(iter, binary_compare);
65 sorter.Execute(range);
69 template <
typename T,
typename StorageT,
class BinaryCompare>
71 BinaryCompare binary_compare,
72 viskores::cont::internal::radix::RadixSortTag)
74 auto c = viskores::cont::internal::radix::get_std_compare(binary_compare, T{});
78 valuesPortal.GetIteratorBegin(),
static_cast<std::size_t
>(values.
GetNumberOfValues()), c);
82 template <
typename T,
typename Container,
class BinaryCompare>
85 using namespace viskores::cont::internal::radix;
86 using SortAlgorithmTag =
typename sort_tag_type<T, Container, BinaryCompare>::type;
92 template <
typename T,
typename StorageT,
typename U,
typename StorageU,
class BinaryCompare>
95 BinaryCompare binary_compare,
96 viskores::cont::internal::radix::PSortTag)
99 constexpr
bool larger_than_64bits =
sizeof(U) >
sizeof(
viskores::Int64);
100 if (larger_than_64bits)
109 IndexType indexArray;
110 ValueType valuesScattered;
127 viskores::cont::internal::KeyCompare<T, viskores::Id, BinaryCompare>(binary_compare),
128 viskores::cont::internal::radix::PSortTag());
135 auto valuesOutPortal =
140 firstprivate(valuesInPortal, indexPortal, valuesOutPortal)
145 valuesOutPortal.Set(i, valuesInPortal.Get(indexPortal.Get(i)));
155 openmp::CopyHelper(inputPortal, outputPortal, 0, 0, size);
165 viskores::cont::internal::KeyCompare<T, U, BinaryCompare>(binary_compare),
166 viskores::cont::internal::radix::PSortTag{});
171 template <
typename T,
typename StorageT,
typename StorageU,
class BinaryCompare>
174 BinaryCompare binary_compare,
175 viskores::cont::internal::radix::RadixSortTag)
177 using namespace viskores::cont::internal::radix;
178 auto c = get_std_compare(binary_compare, T{});
183 valuesPortal.GetIteratorBegin(),
187 template <
typename T,
typename StorageT,
typename U,
typename StorageU,
class BinaryCompare>
190 BinaryCompare binary_compare,
191 viskores::cont::internal::radix::RadixSortTag)
198 IndexType indexArray;
199 ValueType valuesScattered;
213 static_cast<viskores::Id>(viskores::cont::internal::radix::MIN_BYTES_FOR_PARALLEL))
222 viskores::cont::internal::KeyCompare<T, viskores::Id, BinaryCompare>(binary_compare),
223 viskores::cont::internal::radix::PSortTag());
235 firstprivate(valuesInPortal, indexPortal, valuesOutPortal)
240 valuesOutPortal.Set(i, valuesInPortal.Get(indexPortal.Get(i)));
249 openmp::CopyHelper(inputPortal, outputPortal, 0, 0, valuesScattered.GetNumberOfValues());
254 template <
typename T,
typename StorageT,
typename U,
typename StorageU,
class BinaryCompare>
257 BinaryCompare binary_compare)
259 using namespace viskores::cont::internal::radix;
260 using SortAlgorithmTag =
261 typename sortbykey_tag_type<T, U, StorageT, StorageU, BinaryCompare>::type;