2013-06-30 53 views
1

我需要對java環境中的大量數據執行單個計算(sum和product)。我知道最好的解決方案是使用CUDA等SIMD體系結構,但我沒有專用硬件的能力。 你知道在單機上運行並利用多核的map reduce框架嗎?Java多線程

+0

如果只有一個處理器,那麼多線程將無助於計算密集型應用程序。 –

+0

我有一個4核心的CPU。我怎樣才能利用多核架構? –

+0

看看這個[教程](http://arashmd.blogspot.com/2013/06/java-threading.html)可能會幫助你 – 2013-07-03 14:17:38

回答

2

的fork- join框架通常建議對這些類型的任務,因爲它作爲有核會自動使用盡可能多的線程,可以在Java教程閱讀更多關於它:http://docs.oracle.com/javase/tutorial/essential/concurrency/forkjoin.html

。另一方面,如果只是對數字進行求和和相乘,則選擇固定數量的線程(如4)可能會更簡單,並且第一個線程將索引0,4,8中的數字相加,第二個索引中的第1,5,9 ,...第三個在2,6,10,...依此類推

+0

謝謝,你知道基於mapreduce的多線程框架嗎? –

+1

注 - 根據每個元素的大小,跨索引交叉索引可能會導致虛假共享問題。將數據拆分成[核心數量]連續的塊,例如maxIndex/[核心數量],每個大小(或大約 - 最後一個塊大小可能稍大)通常會更好。 –

+0

當所有訪問都是隻讀時,會發生虛假共享嗎? – Joni