diff options
Diffstat (limited to 'boost/compute/algorithm/detail/merge_sort_on_gpu.hpp')
-rw-r--r-- | boost/compute/algorithm/detail/merge_sort_on_gpu.hpp | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/boost/compute/algorithm/detail/merge_sort_on_gpu.hpp b/boost/compute/algorithm/detail/merge_sort_on_gpu.hpp index d5e1a2d8c9..a3d932741f 100644 --- a/boost/compute/algorithm/detail/merge_sort_on_gpu.hpp +++ b/boost/compute/algorithm/detail/merge_sort_on_gpu.hpp @@ -170,8 +170,12 @@ inline size_t bitonic_block_sort(KeyIterator keys_first, k.decl<bool>("compare") << " = " << compare(k.var<key_type>("sibling_key"), k.var<key_type>("my_key")) << ";\n" << + k.decl<bool>("equal") << " = !(compare || " << + compare(k.var<key_type>("my_key"), + k.var<key_type>("sibling_key")) << ");\n" << k.decl<bool>("swap") << " = compare ^ (sibling_idx < lid) ^ direction;\n" << + "swap = equal ? false : swap;\n" << "my_key = swap ? sibling_key : my_key;\n"; if(sort_by_key) { @@ -220,8 +224,12 @@ inline size_t bitonic_block_sort(KeyIterator keys_first, k.decl<bool>("compare") << " = " << compare(k.var<key_type>("sibling_key"), k.var<key_type>("my_key")) << ";\n" << + k.decl<bool>("equal") << " = !(compare || " << + compare(k.var<key_type>("my_key"), + k.var<key_type>("sibling_key")) << ");\n" << k.decl<bool>("swap") << " = compare ^ (sibling_idx < lid);\n" << + "swap = equal ? false : swap;\n" << "my_key = swap ? sibling_key : my_key;\n"; if(sort_by_key) { |