我想知道在多核ARM芯片上运行Dalvik+JIT与在单核芯片上运行相比是否会有损失?
例如,如果我在Android系统构建中禁用了多核支持,并使用单个CPU内核执行整个手机,那么在运行单线程Java基准测试时,我会获得更高的性能吗?
多核的内存屏障和同步的成本是多少?
我之所以问这个问题,是因为我清楚地记得我看到了单核手机与双核手机的单线程基准测试结果。只要Mhz大致相同,两款手机就没有太大区别。我曾预计双核手机的速度会变慢...
发布于 2012-11-02 09:54:04
答案很简单:“你为什么不试一试,找出答案呢?”
复杂的答案是:进行多核同步是有成本的,但拥有多核也有好处。毫无疑问,您可以设计一种病态的情况,即程序受到同步原语的额外开销的影响,从而深受其性能的影响。这通常是由于锁定太深的级别(在您的快速循环内)。但在一般情况下,其他十几个系统程序能够在其他内核上获得CPU时间,以及为中断和IO提供服务的内核,而不是中断您的进程,这一事实很可能会大大超过MP同步带来的损失。
在回答您的问题时,DSB可能需要数十或数百个周期,而DMB的成本可能更高。根据实现方式的不同,独占加载-存储指令可能非常快,也可能非常慢。WFE可能会占用几微秒的时间,但如果您没有遇到争用,则不应该使用WFE。
发布于 2013-01-16 03:30:57
背景:http://developer.android.com/training/articles/smp.html
为SMP构建的Dalvik确实有额外的开销。Java内存模型要求强制执行某些保证,这意味着要设置额外的内存屏障,特别是在处理易失性字段和不可变对象时。
增加的开销是否明显取决于您到底在做什么以及您使用的是什么设备,但一般来说,除非您正在运行目标基准测试,否则您不太可能注意到这一点。
如果您在具有多核的设备上构建并运行Dalvik,您可能会看到不稳定的行为--请参阅上面提到的文档中的附录"SMP故障示例“。
https://stackoverflow.com/questions/13187481
复制相似问题