2010-12-22 61 views
1

我寫了一個Java程序,它繪製了Mandelbrot圖像。爲了使它有趣,我將用於計算每個像素顏色的for循環分成兩半;每一半將作爲一個線程執行,從而使任務並行化。在一個雙核心的CPU系統上,使用兩個線程方法而不是一個主線程的性能接近兩倍。我的問題是在兩個雙核處理器系統上,將並行任務分配到不同的處理器上,而不是在一個處理器上使用兩個內核?我猜想前一種情況會比後一種情況慢,僅僅是因爲兩個CPU在主板線路之間的通信延遲。兩個雙核處理器系統的並行性

任何想法?

謝謝

+1

它太依賴於基本操作系統。你跑哪一個? – marcog 2010-12-22 17:53:05

+0

@marcog窗口7,它在基於Linux的操作系統上會有什麼不同? – nobody 2010-12-22 18:18:09

回答

2

運行線程的哪個處理器(或核心)是依賴於操作系統的東西。我認爲操作系統通常不會在多CPU或多核系統之間做出任何重大區分,因此單核處理器系統上的4核處理器的程序將按照與具有2個雙核處理器的系統相同的方式進行調度。

通常我的經驗是,線程將或多或少地均勻分佈在所有可用的處理器上。因此,如果您要觀看在4核心系統上運行的程序的CPU圖形,則每個核心上的利用率大約爲25%。您可以在大多數操作系統上將線程關聯設置爲特定的CPU /內核,但我不確定該功能是否可用於Java。

1

如果我理解你的描述正確,你只有2個線程。 2線程同時使用4個內核是不可能的。理想情況下,至少需要與系統內核數量相同的線程。由於Mandelbrot集的非均勻成本分佈(計算對於集合中的點比集外更昂貴),最佳線程數可能更高(我會嘗試4×內核數)。

我分在for循環計算每一個像素的顏色成線之間的兩半

我不知道你的意思在這裏,但你可能要分的最外層循環(即至Y迭代座標) 。這將減少兩個或兩個以上的CPU爭用相同的高速緩存行的可能性


注(假設圖像按行優先順序呈現。):Runtime.getRuntime().availableProcessors會告訴你係統中有多少個核了。

相關問題