DSP

经典的延续还是失败的开始?ARM cortex m7性能初探

2019-07-13 16:15发布

      说起嵌入式处理器,学习电子或者自动化专业的同学相比是非常亲切的,笔者是一名自动化专业的学术,无数的NB的算法最后的实现还是需要一颗好的CPU才能真正的发挥出其各种优秀的属性。其实嵌入式CPU已经成为现在CPU中的一个很大很复杂的一个门类。笔者所关系的一直都是好用不贵的神器:MCU。从最经典的intel 的8051到之后的时代王者PIC单片机。再到因为极高性价比而一战成名的神器STM32系列,到最新也是我这次想初探的arm cortex  m7,每个都让我感受到时代的进步,工具的强大,好了话不多说,我就从继承性和发扬性并且用一块开发板的例程来分析这个系列到了M7一代是堕落的开始还是经典的延续。     首先,这个芯片构架是其老一代经典构架cortex M4的威力加强版,这个不用怀疑,稍微翻下指令集就能看出原来的指令集是在的,用官方的说法就是100%的兼容现有的系统。使用过或者研究过cortex  m4构架的童鞋都应该知道,m4其实就是m3的系统上直接添加FPU的版本,这让笔者一开始对于这款基于10年前的那个经典老构架的2次加强版并不看好。但是实际读读宣传手册就会发现差距其实是明显的。 1.构架篇     首先从跑分来看看: cortex m3:
管道 3 阶段 性能效率 3.32 CoreMark/MHz* - 1.25 至 1.50 DMIPS/MHz** cortex m4: DSP 扩展 Single cycle 16/32-bit MAC
Single cycle dual 16-bit MAC
8/16-bit SIMD arithmetic
Hardware Divide (2-12 Cycles) 浮点单元 单精度浮点单元
符合 IEEE 754 流水线 3 级 + 分支预测 性能效率 3.40 CoreMark/MHz* - 1.25 至 1.52 DMIPS/MHz** cortex m7: DSP 扩展 单周期16/32位 MAC
单周期双16位 MAC
8/16位 SIMD 运算
硬件除法(2-12 周期) 浮点单元 单和双精度浮点单元
与IEEE 754 兼容 流水线 6级超标量 + 分支预测 性能效率 5.04 CoreMark/MHz* 性能效率 2.14 / 2.55 / 3.23 DMIPS/MHz** 从宣传手册上关于性能部分明显的差别就能看出新的m7让arm到底有多自信,光从行数就完爆了有没有。而且性能效率内容更是让我惊呆了,提高了30%。        我在这里顺便提下现在用的新跑分规范CoreMark,其实性能这个东西从来不好量化来说,常数对于性能的描写从来都是捡好的说。这个CoreMark也是这样一个产物,但是确实比原来的那一套科学了太多。主要比较的就是1.矩阵乘法2.联合体结构体的访问速度3.状态机4。CRC 从内容上看确实没什么问题,但其实有个最大的限制横在使用者面前,CoreMark的所有运算都是基于定点计算而言的浮点的标准并没有什么标准是各家都承认的,一般嵌入式厂商子啊这方面也都是说有硬件的浮点单元,性能大家都是不说的,只有自己用板子测试时最准确的。所以片子真正的提升不仅看手册更重要是看你要怎么用。如果你拿MCU当PLC,或者做些加密工作,经典的求卷积的工作的话,这个分数很靠谱,如果是其他方面的用法,分数有的时候反而误导你的判断。       说完了跑分,再返回来说说构架的问题,30%的提升不可能无缘无故,有一些ARM的宣传的图片能让我们略窥一二。        架构上,M7具备六级、顺序、双发射超标量流水线,拥有单精度、双精度浮点单元、指令和数据缓存、分支预测、SIMD支持、紧耦合内存(TCM)。指令和数据缓存、分支预测、TCM都是以往M系列上没有的。MCU经常不考虑缓存,有时候甚至将闪存作为唯一的内存接口。通过加入高性能的指令和数据缓存(最大均为64KB),M7开始向典型的高性能处理器设计靠拢。至于说TCM,它可以拥有真正缓存的性能,但其内容是直接由开发者控制的,可以放置一些关键的代码和数据供,通过中断服务请求等途径来访问,而且性能很高。 分支预测的加入则可以让M7用于独立的DSP服务。代码运行在始终开启的MCU上时,几乎总是会不停循环。如果没有分支预测器,代码必须不断评估循环状况,但其中99.9%的时候结果都是同一路径。当然了,分支预测器会消耗一些核心面积,但对于DSP应用来说是值得的。
天国的TI,又被拿出来鞭尸了。 2.实际的一点小测试           啥能信就是不能信让人的嘴,实际牛不牛得看自己的使用范围。笔者作为一位控制专业的主修电机驱动的研究生,现在正好在帮导师弄片子选型的事情,所有正好有时间和经历试过了不少片子,正好可以把这个新的核心性能拿到大环境里比较下。          测试说明:主要测试内容:全浮点情况(单精度)下的电流环控制程序执行时间。具体点来说是ID和IQ控制程序和sin cos使用查表法得到。具体细节牵扯到了产品,不能贴出来,但是懂行的人应该差不多知道计算量还是有点高的。                         编译平台: IAR ARM 7.40                         比较平台:1.猪脚:http://www.atmel.com/tools/atsamv71-xult.aspx?tab=devices  具体型号:ATSAMV71Q21  现在市面上唯一的cortex m7开发板,飞思卡尔和ST的都受到了跳票的影响,一时半伙来不了。但是ATEML是最典型的M7核能说明的问题更多。                                2.ST的168M的cortex M4的MCU,STM32F407                                3.ST的72M的cortex M4的MCU,STM32F3XX                                4英飞凌XMC42XX系列,主频80M,cortex M4                                5.TI2803X,使用软件模拟浮点                   直接贴结果:                              1.猪脚 最好情况:1.6us                              2.407 12.5us                              3.F3XX   33.5us                              4.XMC42XX   40.5us                              5.2803X 14us              结果是猪脚如剧本般胜利了,但是马上仔细分析后就能继续看到些门道。其他的CPU差距其实有点出乎意料,因为即使是同样的M4核,差距也是非常明显的。英飞凌显然是第一次用cortex M4的核心,把握还是明显的出了问题,疑似有不正常的频率问题,即使标称频率比ST的高,实际表现还是差。同样是ST家的说起来就简单多了,果然是同组,频率和性能基本是成正比的。就ST的宣传方法来说,直接说最快的M4,应该能作为M4核心的典型性能。发现其比M7核慢了4倍即使算上频率的翻倍,好像还是说不过去。下面用另一个程序来测试即使是同样的M7核,发挥完整的力量也是需要设置的。