在桌面和移动cpu上使用Java进行并行处理';s

在桌面和移动cpu上使用Java进行并行处理';s,java,multithreading,parallel-processing,cpu,multicore,Java,Multithreading,Parallel Processing,Cpu,Multicore,我正在开发一个并行处理代码来解决一个优化问题 首先,我尝试只运行一个优化作业,我们称之为任务(1)。然后我尝试在并行任务(2)中运行同一作业的两个副本。理论上,这两项任务将花费相同的时间 我的问题是: 当我在i5桌面计算机上运行这些任务时,任务(1)和任务(2)的完成时间相同。 这没有问题。这是我所期望的 但当我使用i7笔记本时,run(2)比run(1)多花大约30倍的时间。 我不理解这种差距。为什么两个完全相同的并行作业要多花30%的时间? 这可能是移动和桌面CPU之间的硬件差异吗 代码和数

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

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

我的问题是:

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

但当我使用i7笔记本时,run(2)比run(1)多花大约30倍的时间。 我不理解这种差距。为什么两个完全相同的并行作业要多花30%的时间? 这可能是移动和桌面CPU之间的硬件差异吗

代码和数据完全相同

唯一的区别是i7笔记本电脑是64位的,而i5桌面电脑是32位的

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


提前感谢。

这可能解释了64位版本运行缓慢的原因

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


我相信这是由于处理器硬件的原因,似乎移动设备的CPU要比台式机的慢。我注意到我的笔记本电脑(i7-2600 QM)和我的台式机(i7-2600)之间有一个类似的区别,用Java运行相同的并行作业在台式机上花费的时间减少了33%。

是的,好吧,硬件在线程和并行处理应用程序中起着主要作用(也可能导致不一致)。两者都在相同的操作系统版本上吗?进程之间的操作系统调度,当两个进程都是windows7时运行。就像我说的桌面是32位的,笔记本是64位的。i7可以有2到6个内核,而i5有2到4个内核。调度在这里也很重要,这两个任务可能有相同的运行时间,但出于任何原因,T2的调度频率可能较低。如果可能,我将尝试手动设置线程优先级。但它看起来很奇怪。因为在执行此任务时,计算机不忙于任何其他任务。其他一切都关闭了。也许我还必须尝试在64位windows7下使用32位java。谢谢dk89。这确实是一个有用的信息。我会考虑的。但这并不是我问题的确切答案。因为我没有比较32位运行时和64位运行时。我将1个线程与2个线程运行进行比较。从理论上讲,它们应该花费相同的时间。但奇怪的是,在i7笔记本中,尽管我使用了完全相同的代码和数据,但两次运行之间仍然存在巨大的差距。@Baatar任务1和任务2是相同的吗?他们在做同样的事情吗?某些操作在64位中可能更快或更慢。是dk89。task1和task2是相同的。仅task1使用一个线程仅运行一个作业,task2使用两个线程运行两个作业。对于i5桌面,这两次运行花费的时间相同。但是在i7笔记本电脑上,一个线程运行和两个线程运行之间有一个间隙(%30)。@Baatar您介意发布代码吗?我认为这是一个非常有趣的问题。。这是一个相当复杂的代码,需要许多jar文件。。但是我会尝试不同的场景,如果我发现了什么,我会告诉你的。谢谢你,洛洛。实际上,我的问题不是台式机和笔记本电脑之间的运行时间差异。我的问题是,在桌面上,我可以用相同的时间运行上述两个任务。但当我在笔记本上运行这些任务时,两次运行之间有一个间隙。这不是移动和桌面CPU之间的比较。