在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
芯片精品文章合集(500篇!)    创芯人才网--重磅上线啦!
查看: 11880|回复: 13

[转贴] Cortex A9/A8/Arm11/Arm9 性能测试PK

[复制链接]
发表于 2010-8-3 10:27:26 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
单核的Cortex-A9在性能上比已经推出的Cortex-A8处理器更高,并且 A9系列可以提供两个乃至四个内核片上SMP产品,能提供总共超过8,000Dhrystone mips(DMIPS)的峰值处理性能,这一性能大约是典型arm11处理器(如iphone)的10-15倍,遑论更早的arm9系列。同时Cortex-a8是可综合的,芯片制造商采用速度优化工艺时的时钟频率能够超过1GHz,也可采用低功耗工艺大幅降低耗电。如果要进一步的省电,还可以采用动态减慢时钟或关闭部分内核的方法。
对称多处理(SMP)早已在大型机、服务器以及PC机上使用多年,这种平行技术的确能够有效的提高计算机的性能。如今的半导体技术允许在一个硅片上集成多个处理器核心,这些核心能够执行同样的指令集,拥有同等的存储器配置,IO访问能力和中断,这就是片上SMP。在这种硬件上运行的高级操作系统能够调度使用任意的核心来运行软件线程或执行中断。这一切过去只能够在“大”的计算机上实现,但在不远的将来,你我的手机上也能够拥有这种高级功能。实现片上SMP对于手持设备来说,可以实现目前用单核方案,如arm11不可能实现的应用。因为SMP可以实现非常好的性能和功耗伸缩性,在保持功耗足够低的前提下,能够将性能扩展到非常高的水平,应对现在和未来丰富的应用,如HD VIDEO播放、如PC般毫不缩水的浏览Internet等。如果使用单核方案,就不得不实现极高的速度——采用2GHz甚至更高主频的掌上处理器,那将导致无法接受的发热和耗电。
现在的移动应用越来越复杂,丰富程度直逼桌面应用,多进程、多线程等技术也早已在手持设备上采用,桌面计算机已经普及的多核心技术更是为SMP进入掌上设备指明了前进的方向。ARM处理器中的Cortex-a9是专门为此类应用设计的。Cortex-a9和前一代Cortex-a8一样是超标量设计,能够单周期执行2条指令,比ARM11处理器同频性能提高约一倍。Cortex-a9处理器更改进了流水线,除了增加多处理指令还加入了乱序执行等功能。除了拥有Cortex-a8的特性之外,每核心平均同频性能比Cortex-a8提高了20%。
实现SMP的第一个消费类嵌入式器是TI OMAP4系列,包括OMAP4430和OMAP4440。除了采用Cortex-a9 MP为处理器核心之外,还提供了哪些高级功能呢?让我们来细数一下:
    45nm芯片工艺,提供高性能的同时只消耗极少的能源 专门为移动嵌入式平台设计,在单一芯片上集成了应用处理器(Cortex-a9担任),多媒体处理IVA3,3D图形加速器PVR SGX540以及其他的各种移动接口 可以支持full HD 1080p尺寸、各种编解码算法,进行实时编码和解码的硬件多媒体加速器IVA3。它的核心当然是专门硬件加上集成的C64x共同协作的结果,同时拥有硬件加速的高效性和dsp的灵活性,实际上等于把DAVINCI平台塞入到你的手机里面 集成高速图形信号处理器,用于处理像素格式变换等。可以支持2千万像素的照相和摄像功能,令OMAP4拥有千万像素数码相机和高清数码DV的功能。 集成PowerVR SGX540三维硬件加速器(3D加速显卡),轻松支持3D桌面,游戏以及其他3D应用 支持HDMI高清视频输出,支持WUXGA显示,同时支持传统的模拟视频
    容易与Wifi,Bluetooth,USB HS/OTG,GPS,3G/4G通讯等各种数据接口连接 配合TWL60x0芯片,实现高级的电源管理,充分节省电池电力
    嵌入式处理器层出不穷,系列和种类繁多。经常在嵌入式产业界见到的处理器,仅指令集家族就有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测试在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 测试平台功能对比

    功能
    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
    在x86架构下为
    -mfpmath=sse -ftree-vectorize -mmmx -msse -msse2 -msse3 -ffast-math
    另外,在arm linux平台下,如果使用的是EABI(embedded application binary interface)配置则允许系统中混合运行softfp,vfp,neon向量浮点等各种浮点实现代码。例如在cortex-a8上运行同时运行优化的向量浮点代码和老式arm920t的软浮点代码,这使得上述测试能够方便的完成。如果用老的oabi环境,切换不同的浮点配置必须把全部的用户代码重新编译。
    下载地址在这里可以找到。
    表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
    图5 fp_fir 单精度浮点乘加性能 单位:秒 越小越好

    可以看到流水线化的向量协处理对数值运算帮助非常大,有数量级的性能提升。这也是为什么INTEL/AMD等处理器厂商都把多媒体指令集作为亮点大肆宣传,各种操作系统和软件也积极应用SIMD指令来进行加速。
    因为嵌入式处理器原本就没有集成全流水线FPU,这种加速对嵌入式处理器如cortex-a8尤其明显。
    此外,嵌入式处理器指令集兼容的历史包袱比x86要少得多,完全可以直接采用向量指令集得到接近大型CPU和传统高端DSP的数值计算性能,有的嵌入式CPU干脆把这类指令叫做嵌入式DSP指令。这类向量指令集在视频图像处理、语音识别、计算机视觉、软件无线电和人工智能等应用上拥有极大的性能/功耗比优势。
发表于 2010-8-6 22:10:42 | 显示全部楼层
不错 受用了
发表于 2010-8-6 22:18:32 | 显示全部楼层
好东西
发表于 2010-9-3 15:46:32 | 显示全部楼层
谢谢分享
发表于 2010-11-4 22:12:02 | 显示全部楼层
学习学习,十分感谢
发表于 2010-11-13 15:48:14 | 显示全部楼层
目前还在玩PXA270,大部队都跑远了
发表于 2010-11-25 08:26:34 | 显示全部楼层
good reference data
发表于 2014-12-31 09:41:37 | 显示全部楼层
非常的妙!
发表于 2015-1-4 18:25:38 | 显示全部楼层
谢谢楼主的分享!!!
发表于 2015-1-9 15:15:46 | 显示全部楼层
非常感谢
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /2 下一条

小黑屋| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-5-1 04:12 , Processed in 0.042273 second(s), 10 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表