]> git.proxmox.com Git - ceph.git/blobdiff - ceph/src/boost/boost/compute/algorithm/detail/merge_sort_on_gpu.hpp
import new upstream nautilus stable release 14.2.8
[ceph.git] / ceph / src / boost / boost / compute / algorithm / detail / merge_sort_on_gpu.hpp
index d5e1a2d8c9daa359b8753953042ab02bc2a8fbc4..a3d932741fc4fc79b5af86f3745961baadde8926 100644 (file)
@@ -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)
     {