neon浮点运算_ARM 浮点计算测试与分析

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来测试单线程和多线程的浮点运算性能,也可以用以测试多个核心协作的效率。

你可能感兴趣的:(neon浮点运算)