簡體   English   中英

如果我不需要完整而嚴格的訂購,最有效的CUDA Thrust或C ++ STL排序謂詞是什么?

[英]What is the most efficient CUDA Thrust or C++ STL sort predicate to use if I don't need a full, strict ordering?

我有一個很大的數組,必須按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()<b.value())時,我的謂詞是相當昂貴的,所以當我不在乎這些值時(我上面的WHAT_GOES_HERE),我希望有更簡單的方法。 例如,我可以使用false嗎? 這將是便宜的,但是我不確定這會導致排序最快終止。

我對GPU和CPU的答案都很感興趣,但主要是GPU。 謝謝。

false是有效的選項,如果該段不需要排序,則將具有相同段的所有元素有效地視為等效。 true並非如此。

或者,如果您想嘗試的話,可以通過其他方法訂購它們。 任何特定的排序是否會導致“排序最快終止”,都可能取決於確切的實現和您的數據,因此,剖析實際上是回答此問題的唯一方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM