我有一个很大的数组,必须在CUDA Thrust或C ++ STL中进行排序。数据已按键划分为多个段。我的排序必须按谓词对某些段中的值进行排序,同时保留每个段的连续性以及段的相对顺序。不需要对其他段中的值进行完全排序。他们可能会在自己的细分受众群中任意移动。
我想知道在我不关心的某些段中用于相对顺序的最有效谓词。
thrust::sort(vec.begin(), vec.end(), [] (auto a, auto b) {
return (a.key() != b.key()) ? a.key() < b.key() : // keep segments in place
(a.needsSorted() ? a.value() < b.value() : (WHAT_GOES_HERE?)); });
当我关心值(上面的a.value() 我对GPU和CPU的答案都感兴趣,但主要是GPU。
谢谢。
答案 0 :(得分:2)
false
是一个有效的选项,如果该段不需要排序,则将具有相同段的所有元素有效地视为等效。 true
不是。
或者,如果您想尝试的话,可以通过其他方法订购它们。任何特定的排序是否会导致“排序最快终止”,这可能取决于确切的实现和您的数据,因此,分析实际上是回答此问题的唯一方法。