簡體   English   中英

使用提供的線程數進行並行基數排序

[英]Parallel radix sort using a provided number of threads

我在理解使用線程進行並行基數排序的概念時遇到了一些困難。

如果使用最高有效位數方法進行操作,則可以從創建存儲桶1到9開始,然后使用其MSD將數字划分為存儲桶。

您可以通過在每個存儲桶中有1個線程來並行排序。

但是,如果我們必須使用給定數量的處理器(例如4)來執行此操作,您如何將這9個存儲桶分成四個處理器?

我在網上看到的一張圖表似乎建議您將數字划分為x個處理器的x個分區(不進行任何排序),然后每個處理器對給定分區的所有數字進行排序。 但是隨后您將剩下x個數字存儲桶,每個存儲桶均按其自身排序,但沒有排序的整個向量/數字數組,而且我不確定接下來要做什么。

在對x個分區進行排序之后,您將合並x個分區。 這可以通過進行2方式合並的log2(x)傳遞或通過x方式合並的單個傳遞來完成。 x方式合並通常使用堆來加速確定x個元素中的哪個(以及元素所屬的分區)最小。 除初始化外,元素一次從堆中刪除並添加到堆中。 最終到達x個分區之一的末尾,並且合並成為x-1合並。 最終只剩下一個分區,並將其復制到輸出數組。

如果數組很大,以至於其分區比核心特定的L1和L2緩存大得多,那么由於沖突,並行基數排序將無濟於事,因為所有核心共享公用的L3(如果存在L4和L4)緩存和主內存。 例如,每個核心的L1緩存可能為32KB,每個核心的L2緩存可能為256KB。

另一種選擇是將陣列分成z個256KB分區,然后對z個分區一次進行x個基數排序。 最后一步是z排序的256KB分區的z方式合並。

對於基數排序,您可能希望對8位字段使用256進制(而不是使用10進制)(可以移位而不是將元素拆分為多個字段)。

暫無
暫無

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

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