2010-12-22 59 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会告诉你系统中有多少个核了。

相关问题