【vfp开源代码栏目提醒】:网学会员--在 vfp开源代码编辑为广大网友搜集整理了:暴强技术贴 Cortex a8 arm11 arm9 - 技术总结绩等信息,祝愿广大网友取得需要的信息,参考学习。
暴强技术贴 Cortex a8 arm11 arm9 暴强技术贴Cortex-a8 arm11 arm9 xscale powerpc嵌入式处理器实测性能2010-11-09 2201一、前言 嵌入式处理器层出不穷系列和种类繁多。
经常在嵌入式产业界见到的处理器仅指令集家族就有x86armpowerpcmips中国龙芯就的就是MIPS指令集sh等。
每种指令集往往又有很多系列下面还有不同版本甚至同一版本有不同芯片厂家实现产品。
这还不够再加上不同的主频、总线结构、存储器cache配置即使在行业里打拼多年的专业人士也难免眼花缭乱。
所以经常有人会问200Mhz的arm9比起嵌入式工控机上的赛扬有多大的性能差距四千多买的500MHz的智能手机究竟比笔记本电脑慢多少 在短时间内全面解释这类问题介绍清楚各种嵌入式处理器的来龙去脉是不可能的。
笔者前日对手里的几个嵌入式处理器进行了性能评测获得了一些有趣儿的结果能够一定程度上说明
问题于是撰文跟大家分享。
涉及的对象包括arm家族
常用的系列嵌入式处理器从初学者都知道的S3C2410到基于arm1136jf-s的OMAP2420还有新一代产品新宠OMAP3/Cortex-a8。
软件运行的操作系统为linux-2.6.24以及之后版本和gcc-4编译器。
最终的测试结果说明了目前嵌入式处理器的性能现状可供感兴趣的读者参考最后还提供了笔者使用的测试
代码下载。
笔者也非常希望爱好者在自己的嵌入式平台上测试并将结果发帖交流。
二、测试方法介绍 本文的内容主要基于笔者亲自测试的结果也有部分结果来自于他人的测试绝大多数的测试对于稍有嵌入式Linux经验的人都可以很容易的重复。
测试项目包括nbench整数性能nbench内存带宽nbench双精度浮点性能单精度浮点FIR性能SIMD向量单精度浮点FIR性能。
测试软件简介nbench nbench是一个简单的用于测试处理器存储器性能的基准测试程序。
即著名的BYTE Magazine杂志的BYTEmark benchmark program。
nbench在系统中运行并将结果和一台运行Linux的AMD K6-233电脑比较得到的比值作为性能指数。
由于是完全
开源的爱好者可以在各种平台和操作系统上运行nbench并进行优化和测试是一个简单有效的性能测试工具。
nbench的结果主要分为MEM、INT和FP其中MEM指数主要体现处理器总线、CACHE和存储器性能INT当然是整数处理性能FP则体现双精度浮点性能大多数嵌入式处理器都没有强大的双精度浮点能力。
fp_fir fp_fir是笔者编写的单精度浮点FIR性能测试
程序简单并直观的评价系统的单精度浮点数乘加性能玩过DSP就知道浮点乘加是TigerSHARC的拿手好戏。
fp_fir的一个亮点是可以很容易的SIMD向量化即利用SSE3/Altivec/Neon等SIMD指令集加速执行。
这个测试的结果也是最有戏剧性的。
三、测试结果 1.nbench测试MEM部分 此测试包括字符排序、数据赋值和位操作。
这个测试中高主频、高速的片内CACHE和快速的外存储器非常重要。
采用新架构的Cortex-a8和强劲的桌面x86占有很大优势其中很大一部分是源于片上的二级CACHE结构 具体分数如下 表1 nbench存储器性能 图1 nbench存储器性能 2.nbench测试INT部分 此测试包含整数排序模拟浮点运算霍夫曼编码IDEA加密算法。
在此测试里主频是最主要的性能因素指令集的并行度也有很大影响所以超标量处理器PentiumIII和Cortex-a8的优势不仅来自于主频也来自于单周期执行多条指令、分支预测等综合能力。
但是更老的PPC440也是双发射的超标量CPU不过并没有体现太大优势一方面是PPC440的ALU指令并不能双发另一方面也是因为通用整数运算内在的并行度并不高指令级并行受限较多并行加速不如主频提高明显。
表2 nbench整数性能 图2 nbench整数性能 3.nbench测试FP部分 此测试包括双精度浮点傅立叶变换、神经
网络、LU分解。
在此测试里面桌面处理器一枝独秀主要是因为PentiumIII拥有强大的SSE浮点处理能力双精度浮点硬件流水线性能远超其他处理器尤其是只有传统标量整数指令集的嵌入式处理器如S3C2410和PPC440。
低功耗的嵌入式处理器一般不会集成双精度流水线FPU主要是因为硅片面积和功耗较大实现浮点处理靠另外的方法。
S3C2410ARM920T和PPC440利用softfloat库实现浮点处理性能是最低的。
当然仅仅是比其他的高级处理器低虽然只有K6-233性能的百分之几。
如果你测试很多S3C2410开发板自带的oabi gcc-2.95硬浮点工具链加上内核NWFPE模拟浮点指令会得到更惨的结果。
oabiNWFPE性能只有softfloat的10到20分之一是向量浮点的几千分之一 XSCALE以及其他ARMV5TE以上的处理器可以利用定点向量指令加快softfloat库模拟其中支持iWMMXT的PXA270可以使用64位定点向量指令显著加快速度。
新的ARM处理器如OMAP2420集成硬件了
VFP虽然不是桌面CPU规模的流水线FPU还是比
软件模拟快很多。
也许读者会奇怪OMAP3 600MHz的浮点性能比OMAP2 400MHz还低这是因为Cortex-a8比arm11进一步简化了
VFP的硬件以降低功耗和面积并引入了如同Pentium4处理器的向量指令集neon。
该指令集最大数据宽度和SSE3一样为128bit可以支持完全流水的向量定点和单精度浮点处理仅仅比SSE3少了双精度浮点流水处理。
由于nbench进行双精度浮点测试并且使用glibc内建的未优化的数学库所以无法发挥neon的性能。
图3 nbench双精度浮点性能 4.fp_fir测试 在fp_fir测试中为了对Cortex-a8的noen向量处理能力进行对比加入了高性能的处理器PentiumD 920 3.0GHz的对比评测。
该
系统配备2GB双通道DDR2内存运行Linux-2.6.27 x86_64 64-bits系统。
同样也加入了基于老式arm920t的S3C2410陪太子读书 需要知道的是PentiumD 920除了拥有嵌入式处理器难以企及的3GHz主频更有2MB L2CACHE和800MHz 64-bits前端总线并且同样集成了SSE3 128-bit SIMD指令集。
表4测试平台功能对比 本次测试将fp_fir程序分别编译到不同平台上分为9中不同的CPU与配置组合 表5测试配置和编译选项 新版本gcc-4.3已经加入了neon向量指令支持而对sse的支持在更早版本中就已经加入了。
要启用向量指令自动生成功能需要在编译参数中加入适当的处理器指令集标记和浮点选择标记在arm架构下为 -mfloat-abisoftfp-mfpuneon-ftree-vectorize-ffast-math 在x86架构下为 -mfpmathsse-ftree-vectorize-mmmx-msse-msse2-msse3-ffast-math 另外在arm
linux平台下如果使用的是EABIembedded application binary interface配置则允许系统中混合运行softfpvfpneon向量浮点等各种浮点实现
代码。
例如在cortex-a8上运行同时运行优化的向量浮点
代码和老式arm920t的软浮点
代码这使得上述测试能够方便的完成。
如果用老的oabi环境切换不同的浮点配置必须把全部的用户
代码重新编译。
下载地址在这里可以找到。
表6 fp_fir单精度浮点乘加性能 图4 fp_fir单精度浮点乘加性能单位秒越小越好 由于向量处理和传统非流水标量处理性能差距很大去掉前面5种地性能的配置。
截取后4种向量处理配置的柱状图可以清晰的看到neon和sse3性能PK 图5 fp_fir单精度浮点乘加性能单位秒越小越好 可以看到流水线化的向量协处理对数值运算帮助非常大有数量级的性能提升。
这也是为什么INTEL/AMD等处理器厂商都把多媒体指令集作为亮点大肆宣传各种操作系统和软件也积极应用SIMD指令来进行加速。
因为嵌入式处理器原本就没有集成全流水线FPU这种加速对嵌入式处理器如cortex-a8尤其明显。
此外嵌入式处理器指令集兼容的历史包袱比x86要少得多完全可以直接采用向量指令集得到接近大型CPU和传统高端DSP的数值计算性能有的嵌入式CPU干脆把这类指令叫做嵌入式DSP指令。
这类向量指令集在视频图像处理、语音识别、
计算机视觉、软件无线电和人工智能等应用上拥有极大的性能/功耗比优势。
由此可见新式的嵌入式处理器实现了一系列同等于原来桌面处理器才有的功能性能也可以在某种程度上接近传统的桌面处理器同时保持了极低的功耗。