簡體   English   中英

內存節省CUDA Thrust sort_by_key的替代方案?

[英]Memory saving alternatives to CUDA Thrust sort_by_key?

cuda / thrust中:嘗試sort_by_key在6GB GPU RAM中的2.8GB數據會拋出bad_alloc ,我已經讀過sort_by_key消耗了大部分內存用於其中考慮的測試用例。

是否有一種替代方法可以完全執行sort_by_key正在執行的操作,即使它稍慢但可以對更大的數據集進行排序?

我一直在搜索一下,我認為以下是你問題的候選答案。

引用N. Bell和J. Hoberock,“Thrust:面向生產力的CUDA庫”,GPU計算寶石翡翠版:

Thrust靜態選擇一個高度優化的Radix Sort算法,用於使用標准的less greater比較運算符對基本類型( charintfloatdouble )進行排序。 對於所有其他類型(例如,用戶定義的數據類型)和比較運算符,Thrust使用常規的合並排序算法。 因為使用Radix Sort排序基元比Merge Sort快得多,所以這種靜態優化具有重要價值。

現在, Merge Sort需要O(N)內存空間,請參閱合並排序的空間要求

此外, Radix Sort仍然需要O(N)內存空間,請參閱Bucket Sort和RADIX Sort的比較

兩者中哪一個消耗更多內存未定義,取決於要排序的輸入序列以及算法調整參數,請參閱為什么quicksort比radix-sort更受歡迎的答案之一

與此相反,如果就地執行快速排序需要O(logN)內存空間,否則它需要O(N) 有關快速排序算法的CUDA實現,您可以查看特斯拉K20如何加速快速排序。

對於其他就地排序算法( 就地策略值得探索,因為它與非就地對應物相比節省了內存),請查看Bitonic排序 ,請參閱使用CUDA進行快速就地排序基於bitonic排序

暫無
暫無

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

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