2011-06-09 37 views
1

好吧,我正在解決一個非常隱隱的問題。 - 從一個共同的源生成素數(這不是安靜尷尬的並行,因爲它們被寫入(如果他們是一個因素從檢查讀取) 利息:http://pastebin.com/sQQLpMgB最佳線程數

在任何情況下,事情啓發了我寫這個(部分)是實現我的訪問this 雙Xeon E5520的CPU(帶IIRC 16GB RAM與它去)

所以我知道,每個CPU支持8個活動線程。 但隨後有背景進程(以及可能的其他用戶)使用其中的一些(實際上可能更多的是所有這些) 那麼什麼是星期四的好規則多少個線程讓事情變得更快,在他們被頭頂阻擋之前。 (我想這條規則需要考慮有多少線程可以同時激活)

回答

2

沒有這樣的規則。這取決於很多因素,特別是你的應用程序是否受I/O限制(聽起來像你的不是)。要做的事情是參數化線程的數量,以便可以從配置文件或命令行指定它,然後使用該數字進行處理,直到找到適合您的特定問題和配置的最佳位置。

+0

你可以建議一個適合的工具,如果我已經擊中最佳位置了嗎? – 2011-06-10 00:13:39

+0

@Oxinabox二進制搜索? – 2011-06-10 00:29:45

+0

Binery搜索會起作用,是的。好想法。 (花了我30秒來解決你的問題)。我甚至可以把決定理想線程數的位,在每次啓動hte程序時運行,因此它總是以最佳方式運行。 – 2011-06-10 01:01:36

1

如果操作大部分是CPU綁定的(不等待I/O操作),那麼第一個猜測與邏輯CPU內核的數目是1對1。考慮到生成素數大多是CPU綁定的,並且您將擁有16個邏輯內核,那麼我將使用16個線程開始開始。做一些測試,看看會發生什麼。我預計性能會在16個線程左右達到峯值,但這取決於發生多少I/O來存儲已生成的素數。