2013-06-30 109 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