在桌面和移动CPU上使用Java进行并行处理



我正在开发一个并行处理代码来解决一个优化问题。

首先,我尝试只运行一个优化作业,我们称之为task(1)。然后我尝试在并行任务(2)中运行相同作业的两个副本。从理论上讲,这两项任务将花费相同的时间。

我的问题是:

当我在我的i5台式计算机上运行这些任务时,任务(1)和任务(2)需要相同的时间来完成。这没有问题。这正是我所期望的。

但是当我使用我的i7笔记本电脑时,运行(2)比运行(1)花费大约%30倍。我不明白这个差距。为什么两个完全相同的并行作业要多花30%的时间?手机和桌面cpu之间会有硬件差异吗?

代码和数据完全相同。

唯一的区别是i7笔记本电脑是64位,而i5台式机是32位。

有没有人有与此相关的想法或经验?

这可能解释了64位版本运行缓慢的原因。Java HotSpot VM FAQ

一般来说,与在32位虚拟机上运行相同的应用程序相比,能够在64位虚拟机上处理大量内存的好处是性能损失很小。这是因为系统中的每个本机指针占用8字节而不是4字节。这些额外数据的加载对内存使用有影响,根据Java程序执行期间加载了多少指针,这会导致执行速度略微变慢。好消息是,使用以64位模式运行的AMD64和EM64T平台,Java VM可以获得一些额外的寄存器,它可以使用这些寄存器来生成更有效的本机指令序列。这些额外的寄存器提高了性能,当比较32位和64位的执行速度时,通常根本没有性能损失。在SPARC上运行64位平台的应用程序与在SPARC上运行32位平台的应用程序的性能差异在迁移到64位VM时大约下降10-20%。在AMD64和EM64T平台上,这一差异在0-15%之间,具体取决于应用程序执行的指针访问量。

我认为这是由于处理器硬件,似乎移动cpu比桌面cpu慢。我注意到我的笔记本电脑(i7-2600 QM)和台式机(i7-2600)之间也有类似的差异,在台式机上用Java运行相同的并行作业所需的时间减少了33%。

最新更新