3

我想知道在多核 ARM 芯片与单核芯片上运行 Dalvik+JIT 是否会受到惩罚?

例如,如果我在我的 Android 系统构建中禁用多核支持并使用单个 CPU 内核执行整个手机,在运行单线程 Java 基准测试时我会获得更高的性能吗?

多核上内存屏障和同步的成本是多少?

我之所以问,是因为我隐约记得看到单核手机与双核手机的单线程基准测试分数。只要 Mhz 差不多,这两款手机就没有太大区别。我曾预计双核手机会放缓....

4

2 回答 2

1

简单的答案是“你为什么不试试看呢?”

复杂的答案是:进行多核同步是有成本的,但拥有多核也有好处。毫无疑问,您可以设计一个病态的情况,即程序遭受同步原语的额外开销,从而深受其性能的影响。这通常是由于锁定在太深的级别(在您的快速循环内)。但在一般情况下,十几个其他系统程序能够在其他内核上获得 CPU 时间,以及内核服务中断和 IO 而不是中断您的进程,这一事实可能会大大压倒由MP同步。

在回答您的问题时,DSB 可能需要数十或数百个周期,而 DMB 可能成本更高。根据实现,独占加载存储指令可能非常快或非常慢。WFE 可能会消耗几微秒,但如果您没有遇到争用,则不需要它。

于 2012-11-02T01:54:03.657 回答
0

背景:http: //developer.android.com/training/articles/smp.html

为 SMP 构建的 Dalvik 确实有额外的开销。Java 内存模型要求强制执行某些保证,这意味着发布额外的内存屏障,特别是在处理易失性字段和不可变对象时。

增加的开销是否明显取决于您正在做什么以及您使用的设备,但一般来说,除非您运行有针对性的基准测试,否则您不太可能注意到它。

如果您为 UP 构建并在具有多个内核的设备上运行 Dalvik,您可能会看到不稳定的行为——请参阅上面引用的文档中的“SMP 故障示例”附录。

于 2013-01-15T19:30:57.133 回答