我在使用Pthreads爲列表分割成右側和左側一半(小於和大於數據透視表)之後爲每個分區創建一個新的階段。我遞歸地做這件事,直到我達到允許線程的最大數量。使用Pthreads並行化Quicksort無法獲得任何加速
當我使用printfs來跟蹤程序中發生的事情時,我清楚地看到每個線程都在並行執行委派的工作。但是使用單個進程總是最快的。只要我嘗試使用更多的線程,完成幾乎雙打所花費的時間,並隨着線程數的增加而增加。
我被允許在服務器上運行多達16個處理器。
該算法如下所示: 將元素與主元素進行比較,將數組分割爲左和右。 爲左側和右側開始一個新線程,並等待線程返回。 如果有更多的可用線程,他們可以創建更多的遞歸。 每個線程都等待其子加入。
一切都對我有意義,而且排序工作完美,但更多的線程使其非常緩慢。
我試着爲每個分區設置一個最小數量的元素來啓動線程(例如50000)。
我嘗試了一種方法,當一個線程完成時,它允許啓動另一個線程,從而導致數百個線程開始和完成整個過程。我認爲開銷太大了。所以我擺脫了這一點,如果一個線程完成執行,則不會創建新線程。我有更多的加速,但仍然比單個進程慢很多。
我使用的代碼如下。
沒有任何人有任何線索,以什麼我可以做錯了什麼?
嘗試將'num_processes'設置爲2並查看會發生什麼。 – Brian 2010-06-07 14:18:23