如果我不需要完整而严格的订购,最有效的CUDA Thrust或C ++ STL排序谓词是什么?

时间:2018-12-06 21:53:08

标签: c++ stl cuda thrust

我有一个很大的数组,必须在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。 谢谢。

1 个答案:

答案 0 :(得分:2)

false是一个有效的选项,如果该段不需要排序,则将具有相同段的所有元素有效地视为等效。 true不是。

或者,如果您想尝试的话,可以通过其他方法订购它们。任何特定的排序是否会导致“排序最快终止”,这可能取决于确切的实现和您的数据,因此,分析实际上是回答此问题的唯一方法。