[英]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.