首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

Cortex-a8 arm11 arm9 xscale powerpc 嵌入式处理器实测性能

Cortex-a8 arm11 arm9 xscale powerpc 嵌入式处理器实测性能

嵌入式处理器层出不穷,系列和种类繁多。经常在嵌入式产业界见到的处理器,仅指令集家族就有x86,arm,powerpc,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性能。
测试软件简介nbenchnbench是一个简单的用于测试处理器,存储器性能的基准测试程序。即著名的BYTE Magazine杂志的BYTEmark benchmark program。nbench在系统中运行并将结果和一台运行Linux的AMD K6-233电脑比较,得到的比值作为性能指数。由于是完全开源的,爱好者可以在各种平台和操作系统上运行nbench,并进行优化和测试,是一个简单有效的性能测试工具。nbench的结果主要分为MEM、INT和FP,其中MEM指数主要体现处理器总线、CACHE和存储器性能,INT当然是整数处理性能,FP则体现双精度浮点性能(大多数嵌入式处理器都没有强大的双精度浮点能力)。
fp_firfp_fir是笔者编写的单精度浮点FIR性能测试程序,简单并直观的评价系统的单精度浮点数乘加性能(玩过DSP就知道,浮点乘加是TigerSHARC的拿手好戏)。fp_fir的一个亮点是可以很容易的SIMD向量化,即利用SSE3/Altivec/Neon等SIMD指令集加速执行。这个测试的结果也是最有戏剧性的。
1.nbench测试MEM部分此测试包括字符排序、数据赋值和位操作。这个测试中,高主频、高速的片内CACHE和快速的外存储器非常重要。采用新架构的Cortex-a8和强劲的桌面x86占有很大优势,其中很大一部分是源于片上的二级CACHE结构
具体分数如下
     表1 nbench 存储器性能

处理器名称MEM性能指数(越大越好)
Pentium MMX 166MHZ0.51
S3C2410 200MHz0.67
PXA255 400MHz0.94
PXA270 520MHz1.16
OMAP2420 400MHz1.17
PPC440 400MHz1.46
PentiumIII 800MHz3.74
OMAP3530 600MHz3.04


     图1 nbench 存储器性能

2.nbench测试INT部分
此测试包含整数排序,模拟浮点运算,霍夫曼编码,IDEA加密算法。在此测试里,主频是最主要的性能因素,指令集的并行度也有很大影响,所以超标量处理器PentiumIII和Cortex-a8的优势不仅来自于主频,也来自于单周期执行多条指令、分支预测等综合能力。但是更老的PPC440也是双发射的超标量CPU,不过并没有体现太大优势,一方面是PPC440的ALU指令并不能双发,另一方面也是因为通用整数运算内在的并行度并不高,指令级并行受限较多,并行加速不如主频提高明显。
     表2 nbench 整数性能

处理器名称INT性能指数(越大越好)
Pentium MMX 166MHZ0.53
S3C2410 200MHz0.76
PXA255 400MHz1.26
PXA270 520MHz1.82
OMAP2420 400MHz1.86
PPC440 400MHz1.67
PentiumIII 800MHz3.39
OMAP3530 600MHz3.57


     图2 nbench 整数性能



3.nbench测试FP部分
此测试包括双精度浮点傅立叶变换、神经网络、LU分解。在此测试里面桌面处理器一枝独秀,主要是因为PentiumIII拥有强大的SSE浮点处理能力,双精度浮点硬件流水线性能远超其他处理器,尤其是只有传统标量整数指令集的嵌入式处理器,如S3C2410和PPC440。
低功耗的嵌入式处理器一般不会集成双精度流水线FPU,主要是因为硅片面积和功耗较大,实现浮点处理靠另外的方法。
  • S3C2410(ARM920T)和PPC440利用softfloat库实现浮点处理,性能是最低的。(当然,仅仅是比其他的高级处理器低,虽然只有K6-233性能的百分之几。如果你测试很多S3C2410开发板自带的oabi gcc-2.95硬浮点工具链,加上内核NWFPE模拟浮点指令,会得到更惨的结果。oabi+NWFPE性能只有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 双精度浮点性能

处理器名称FP性能指数(越大越好)
Pentium MMX 166MHZ0.85
S3C2410 200MHz0.01
PXA255 400MHz0.59
PXA270 520MHz0.99
OMAP2420 400MHz1.43
PPC440 400MHz0.04
PentiumIII 800MHz6.62
OMAP3530 600MHz0.98


     图3 nbench 双精度浮点性能



4.fp_fir测试
     表4 测试平台功能对比

功能
OMAP2420/arm1136jf-s
指令集 arm v6
OMAP3530/Cortex-a8
指令集 arm v7a
PentiumD 920
代号Presler 指令集x86_64
工艺90nm 标准单元65 nm 标准单元65nm Intel custom
主频400MHz600Mhz3.0GHz
L1 cache16KB I-cache 16KB D-cache16KB I-cache 16KB D-cache12KB Trace I-cache 16KB D-cache
L2 cache256KB每核心2MB
运行平台32-bits armv6el linux-2.6.21 glibc-2.5 gcc-4.1.232-bits armv7el linux-2.6.28 glibc-2.7 gcc-4.3.264-bits x86_64 linux-2.6.27 glibc-2.7 gcc-4.3.2
传统FPU非流水VFP非流水VFP深流水线FPU
SIMD FPU流水线neon 128-bits向量单精度浮点深流水线sse3 128-bits向量单精度和双精度浮点
片上多处理arm1136 + C55x DSPCortex-a8 + C64x DSPx86_64双核SMP
图形加速集成 MBX 3D加速 IVA视频加速集成 SGX 3D加速 IVA2视频加速无内置


本次测试将fp_fir程序分别编译到不同平台上,分为9中不同的CPU与配置组合
    表5 测试配置和编译选项

配置名称
编译配置
S3C2410 200MHz softfloat采用软浮点库,编译选项
-mcpu=arm920t -mtune=arm920t -O3 -msoft-float -ffast-math
OMAP2420 400MHz softfloat采用软浮点库,编译选项
-mcpu=arm1136jf-s -mtune=arm1136jf-s -O3 -msoft-float -ffast-math
OMAP2420 400MHz vfp采用VFP硬件浮点,编译选项
-mcpu=arm1136jf-s -mtune=arm1136jf-s -O3 -mfloat-abi=softfp -mfpu=vfp -ffast-math
OMAP3530 600MHz vfp采用VFP硬件浮点,编译选项
-mcpu=cortex-a8 -mtune=cortex-a8 -O3 -mfloat-abi=softfp -mfpu=vfp -ffast-math
OMAP3530 600MHz auto vectorized采用neon向量浮点,gcc-4.3.2自动生成neon向量指令,编译选项
-mcpu=cortex-a8 -mtune=cortex-a8 -O3 -mfloat-abi=softfp -mfpu=neon -ftree-vectorize -ffast-math
OMAP3530 600MHz manual vectorized采用手工编写的汇编函数,人工调用neon向量浮点指令,编译选项
-mcpu=cortex-a8 -mtune=cortex-a8 -O3 -mfloat-abi=softfp
PentiumD920 3.0GHz scalar fpu采用FPU硬件浮点,编译选项
-march=nocona -O3
PentiumD920 3.0GHz SSE3 vectorized采用sse3向量浮点,gcc-4.3.2自动生成sse3向量指令,编译选项
-march=nocona -O3 -ftree-vectorize -ffast-math -mfpmath=sse -mmmx -msse -msse2 -msse3


新版本gcc-4.3已经加入了neon向量指令支持,而对sse的支持在更早版本中就已经加入了。要启用向量指令自动生成功能,需要在编译参数中加入适当的处理器指令集标记和浮点选择标记,在arm架构下为
-mfloat-abi=softfp -mfpu=neon -ftree-vectorize -ffast-math

     表6 fp_fir 单精度浮点乘加性能

处理器名称1M samples 1024点单精度浮点FIR用时(越小越好):秒
S3C2410 200MHz softfloat
1175.22
OMAP2420 400MHz softfloat
248.39
OMAP2420 400MHz vfp
34.45
OMAP3530 600MHz vfp
53.17
OMAP3530 600MHz auto vectorized
6.98
OMAP3530 600MHz manual vectorized
2.99
PentiumD920 3.0GHz scalar fpu
6.91
PentiumD920 3.0GHz SSE3 vectorized
0.95


     图4 fp_fir 单精度浮点乘加性能  单位:秒  越小越好

     由于向量处理和传统非流水标量处理性能差距很大,去掉前面5种地性能的配置。截取后4种向量处理配置的柱状图,可以清晰的看到neon和sse3性能PK



可以看到流水线化的向量协处理对数值运算帮助非常大,有数量级的性能提升。这也是为什么INTEL/AMD等处理器厂商都把多媒体指令集作为亮点大肆宣传,各种操作系统和软件也积极应用SIMD指令来进行加速。
因为嵌入式处理器原本就没有集成全流水线FPU,这种加速对嵌入式处理器如cortex-a8尤其明显。
此外,嵌入式处理器指令集兼容的历史包袱比x86要少得多,完全可以直接采用向量指令集得到接近大型CPU和传统高端DSP的数值计算性能,有的嵌入式CPU干脆把这类指令叫做嵌入式DSP指令。这类向量指令集在视频图像处理、语音识别、计算机视觉、软件无线电和人工智能等应用上拥有极大的性能/功耗比优势。
返回列表