1.浮点计算评估:
1.1.采用Whetstone benchmark
Whetstone benchmark(Whetstone: floating-point arithmetic performance)来测试CPU的性能。
Intel Pentium Dual-Core CPU E5300 2.60GHzVSQualcomm Snapdragon S2 MSM8255 1.0GHz强17倍。
IntelC Converted Double Precision Whetstones: 1250.0 MIPS
ArmC Converted Double Precision Whetstones: 67.6 MIPS
1.2.LinPack
Linpack是一款测试处理器浮点运算性能的App,在桌面平台中享有盛名。Linpack通过用高斯消元法求解一元N次方程,来测试处 理器的浮点运算能力。实测小米平板约为633(单线程)-720(多线程)MFLOPS
Intel® Core™ i7-2600K CPU @ 3.40GHz,4 核的机器测试的结果中,93GFlops
LinPack分为单线程测试和多线程测试,单核性能方面,MT6589依然垫底,Atom Z2580表现略好一些,i7-4770K和G1620的优势依然很大。但到了多线程测试中,Exynos 5410内部的四颗Coetex-A15核心开始发威,直接干掉了
奔腾
G1620,骁龙600和APQ8064也能和G1620相提并论了,毕竟G1620只是双核
心而已,再加上优化不一定到位,造成了这一局面,但即便是在优化不足的情况下,ARM距离i7-4770K还有很大差距。
1.3.其它
此前其实已经有专业人士对此进行过测算,理论上1.3GHz主频的四核ARM处理器浮点运算能力在10MFLOPs/s左右,2.5GHz主频的intel四核Q8300在25GFLOPs/s左右,前后差不多相差了2500倍。
注:下面那条为浮点性能,单位为GIPS,就是MIPS╳1000。
2.硬件分析
2.1.cpu
lCore i7 2600K 3.4GHz51.18 GFLOPS
Haswell
架构中拥有2个新的FMA单元(Intel的FMA3指令),每个FMA单元支持8个单精度或4个双精度浮点数。
2个256比特的SIMD单元
lARM Cortex-A9(Tegra 2 双核 1GHz,理论双精度浮点性能2GFLOPS)
lCortex-A15
VFPv4,具备硬件 FMA 指令执行,可以在同频下提供两倍的峰值浮点性能。此外,A15 还具备硬件除法指令,在 A9 上这需要接近 50 个周期来执行。
lCortex-A53(ARMv8 64/32-bit)
n在处理32bit软件也比Cortex-A15快20-30%左右
31个64bit通用寄存器(General Purpose Registers)
32个128bit Registers,用作执行SIMD
ARMv8A除了可执行单精度(Single Precision)FP数据外,新增支持双精度(Double Precision)FP数据
新增了IEEE754-2008 FP指令,如MaxNum/MinNum等等。
2.2.GPU
lNVIDIA官方 宣称k1的浮点性能大约是365GFLOPS
lARM原生的Mali-T700x系列,最高浮点性能是326.4GFLOPS
vOpenCL:
虽然苹果制定OpenCL的私心路人皆知,希望通过OpenGL来让自家的Mac电脑可以顺利的使用两个显卡巨头的产品做GPGPU运算。但是苹果的这一举措却为未来的x86平台异构计算奠定了坚实的基础。因为无论是CUDA还是FireStream,无论是CUDA核心还是流处理器,软件开发人员都可以通过OpenCL来支持。
在android上要开发opencl,手机端要有libopencl.so文件(也就是opencl驱动);但是现在android手机端很少有这个文件;原因是虽然AMD、Intel、NVIDIA、苹果等支持opencl,但是google好像不太支持opencl.
vRenderScript
google有RenderScript(渲染脚本,也是基于异构计算的思想实现的API,优点是跨平台性好,适合各种android操作系统,但是性能比opencl稍差点);google要推广自己的API的可能性大一些;因此大部分android手机支持RenderScript,却很少有支持opencl的(android 4.3后删除了libopencl.so)。
作为移动应用的开发者,可以借助RenderScript开发出强大的Android应用。更可以使用如Adreno SDK、MARE SDK等第一方芯片厂商的方案,轻松为应用做更深层的优化。
vC++ AMP
是微软Visual Studio和C++编程语言的新扩展包,用于辅助开发人员充分适应现在和未来的高度并行和异构计算环境。
3.名语解析
3.1.VFP(Vector Floating Point,向量浮点)
是ARM架构的浮点单元协处理器扩展,提供了完全遵循IEEE 754-1985的低成本单精度和双精度浮点支持。
虽然VFP打着向量的名头,不过这些“向量”指令的各个向量是串列方式执行(或者需要单精度搭配双精度才能实现并行执行)的,并不能提供真正的SIMD向量并行,因此这个向量模式被拿掉了。
3.2.NEON
ARM®NEON™ 通用SIMD
引擎可有效处理当前和将来的多媒体格式,从而改善用户体验。
NEON技术可加速多媒体和信号处理算法(如视频编码/解码、2D/3D图形、游戏、音频和语音处理、图像处理技术、电话和声音合成),其性能至少为ARMv5性能的3倍,为
ARMv6
SIMD性能的2倍。
Advanced SIMD扩展在微架构实现中被称作MPE(媒体处理引擎),是一个64-bit和128-bit SIMD指令集扩展,支持8/16/32/64位整数和32-bit单精度浮点数,共享使用VFP的寄存器。从ARMv8开始,NEON在AArch 64-bit模式下提供完全遵循IEEE 754和双精度支持并且透过VFPv4具备32个128-bit寄存器。
通过干净方式构建的 NEON 技术可无缝用于其本身的独立管道和寄存器文件。
NEON技术是ARM
Cortex™-A系列
处理器的128位SIMD(单指令,多数据)架构扩展,旨在为消费性多媒体应用程序提供灵活、强大的加速功能,从而显著改善用户体验。它具有32个寄存器,64位宽(双倍视图为16个寄存器,128位宽。)
NEON指令可执行“打包的SIMD”处理:
·寄存器被视为同一数据类型的元素的矢量
·数据类型可为:签名/未签名的8位、16位、32位、64位单精度
浮点
·指令在所有通道中执行同一操作
使用NEON技术的ARM
Cortex™-A系列
处理器,以及ARM的
Mali多媒体硬件
解决方案可用于多媒体应用
,范围从智能手机
和移动计算
设备到HDTV
。
Advanced SIMD扩展在微架构实现中被称作MPE(媒体处理引擎),是一个64-bit和128-bit SIMD指令集扩展,支持8/16/32/64位整数和32-bit单精度浮点数,共享使用VFP的寄存器。从ARMv8开始,NEON在AArch 64-bit模式下提供完全遵循IEEE 754和双精度支持并且透过VFPv4具备32个128-bit寄存器。
3.3.SIMD(Single Instruction Multiple Data)
单指令多数据流,能够复制多个操作数
,并把它们打包在大型寄存器
的一组指令集
3.4.Linpack
是一款测试处理器浮点运算性能的App,在桌面平台中享有盛名。Linpack通过用高斯消元法求解一元N次方程,来测试处 理器的浮点运算能力。The LINPACK Benchmarks are a measure of a system’s floating point computing power. Introduced by Jack Dongarra, they measure how fast a computer solves a dense N by N system of linear equations Ax = b, which is a common task in engineering. The solution is obtained by Gaussian elimination with partial pivoting, with 2/3*N3+ 2*N2floating point operations. The result is reported in Millions of FLoating-point Operations Per Second (MFLOP/s, sometimes simply calledFLOPS
).
Android上的Linpack可以测试单线程也可以测试多线程(但好像只支持到双线程),测试的成绩越高越好。这意味着可以使用Linpack来测试单线程和多线程的浮点运算性能,也可以用以测试多个核心协作的效率。