64位ARM(Aarch64)指令由15提高性能30%,比32位ARM(Aarch32)说明

昨天是一个非常忙碌的一天,推出两款低成本64位ARM开发板,即树莓派3和ODROID-C2,和往常一样有一些相关的推出在评论部分的电路板非常有趣的讨论。一个附带的受试者的是,虽然树莓丕3板是使用64位处理器,操作系统仍然使用32位指令(Aarch32)汇编的,甚至对ARMv6优化,并且它们打算保持它按照这种方式以埃本厄普顿的采访:
埃本爽快地承认,不是所有的新的部件的功能是要在发射中使用,但是。“虽然这是一个64位的核心,我们使用它只是一个更快的32位内核,”他揭示了淠3的中央处理单元。“我能想象有好多有一些实实在在的好处[64位代码。缺点是,你真正创造一个独立的世界。要访问的好处,你就必须有两个操作系统。我希望有人会来证明,我认为这是一个好主意。但也有一些真正令人信服的优势仍在基本上ARMv6的,因为它的[Cortex-] A53这是一个很好的32位处理器。“
因此,运行ARMv6的32位代码的明显优势在于单个图像可以用于所有的树莓派板,而他们不得不为每块板优化代码,他们就会有一个形象的树莓派(ARMv6的),一个为树莓派2(ARMv7的),和最后一个树莓派3(ARMv8),显然这将需要大量的幕后工作。从理论上讲,应该有运行64位ARM指令的性能优势,但问题是多少呢?
ARM带来了一些角度来性能提升他们的介绍“ ARMv8:优点为Android ”上设置任何指示编译他们在Aarch32比较Aarch64的性能提升(64位ARM指令)(32位ARM指令)运行基准朱诺发展板。

第一个图表显示本机(C / C ++代码)性能为15%至约20%的速度在仿生基准和AnTuTu的5.0单线程和多线程CPU测试。

图2显示ART(Java运行时)的性能也与使用Aarch64象限2.0 CPU得分更好的约15%,接近30%的速度用的Linpack多线程基准。
博通BCM2837处理器的皮质A53芯有可能被进一步影响,因为它们被运行编译为旧的ARMv6,这比用于ARMv7慢的码。让我们再有趣的例子。在发布树莓派3的基准MAGPI揭示sysbench的在49.02秒多线程CPU测试和tkaiser,为armbian项目的一个活跃的开发完成后,运行在松A64 sysbench的发展在Ubuntu 16.04 64位,其结果是相当惊人的考虑全志A64也是一款四核Cortex A53处理器@ 1.2GHz的:

tk@pine64plus:~$ sysbench –test=cpu run –num-threads=4

sysbench 0.4.12:  multi-threaded system evaluation benchmark

Running the test with following options:
Number of threads: 4

…

Maximum prime number checked in CPU test: 10000

Test execution summary:

total time:                          3.2562s
total number of events:              10000
total time taken by event execution: 12.9950

per-request statistics:

min:                                  1.21ms
avg:                                  1.30ms
max:                                 13.14ms

approx.  95 percentile:               1.30ms

Threads fairness:

events (avg/stddev):           2500.0000/10.70
execution time (avg/stddev):   3.2487/0.00
于是花了仅为3.25秒派A64相比对树莓派349.02秒与ARMv6指令ARMv8指令,所以才出现,如果你是专门寻找素数它付出很大的时间(快15倍)切换到Aarch64说明。请记住,sysbench的命令行基准有可能影响结果的选项,遗憾的是我们没有对树莓派3确切的命令行使用,但他们最有可能使用的默认选项如上(最大素数: 10,000),因为另一个人跑了基准20,000最大的RPi3,即完成围绕119秒。
ARMv8的哪些具体的改进可能会带来额外的性能呢?读者和评论者“ 蓝光 ”解释说:
嗯,一,编译器的自动向量化实际上aarch64霓虹灯工程,而在你的ARMv7大多已经通过内联汇编依靠手工矢量化。另一个大的胜利是两次较大的GPR和FPR文件(当它涉及到FP64:D16 – > D32),在很大程度上降低了编译(而不是只)代码寄存器压力。最后但并非最不重要的,最近的编译器已经更侧重于AArch64,在那里他们可以产生更好的代码VS ARMv7的没有这么多,因为硬件资源的差异,而是因为更多的人,努力走进AArch64后端(和拱提供了一堆小调整,使编译器作者的生活更容易)。
概括起来讲,人们可以从观察到的ARMv7一个AArch64加速显著为目标(即更大的硬件资源)和主观(即更大的人,精力)的原因。
现在,树莓派3是不使用32位操作系统的唯一平台,因为大多数Android设备和电路板我到目前为止的测试,排除DragonBoard 410C融合了64位内核的32位用户空间。ODROID-C2主板,但是,将与Ubuntu 16.04 64位ARM(又名ARM64)支持。
然而,有的编译代码与64位指令的副作用,尺寸变大。另一位读者“ 乔恩 ”编译代码为瑞芯微RK3128的Cortex A7处理器(ARMv7的/ 32位)和松A64的Cortex A53处理器(ARMv8 / 64位),发现在内存大小一些大的差异。

Binary ARMv7 Size (Bytes) ARMv8 Size (Bytes) Ratio
libcrypto.so  1,052,920  1,673,400  1.59x
toolbox Android 5.1  150,836  255,280  1.69x

所以,如果你是在存储或者存储紧实,32位代码可能是一个更好的选择。
Read more: http://www.cnx-software.com/2016/03/01/64-bit-arm-aarch64-instructions-boost-performance-by-15-to-30-compared-to-32-bit-arm-aarch32-instructions/#ixzz41cqJBzT6

标签