精华内容
下载资源
问答
  • 目前国内在ARM CPU上广泛采用的三种嵌入式操作系统浅析
    千次阅读
    2019-03-11 20:54:43

    转载地址:http://www.elecfans.com/emb/20190222874035.html

    嵌入式操作系统是ARMCPU的软件基础,从8位/16位单片机发展到以ARMCPU核为代表的32位嵌入式处理器,嵌入式操作系统将替代传统的由手工编制的监控程序或调度程序,成为重要的基础组件。更重要的是嵌入式操作系统对应用程序可以起到屏蔽的作用,使应用程序员面向操作系统级开发应用软件,并易于在不同的ARM核的嵌入式处理器上移植。

    嵌入式操作系统都具有一定的实时性,易于裁剪和伸缩,可以适合于从ARM7到Xscale各种ARMCPU和各种档次的应用,嵌入式操作系统可以使用广泛流行的ARM开发工具,如ARM公司的SDT/ADS和RealView等,也可以使用开发软件,如GCC/GDB、KDE或Eclipe开发环境,市场上还有专用的开发工具,如Tornado、μC/View、μC/KA、CODE/Lab、Metroworks等。

    本文就目前国内在ARM CPU上广泛采用的三种嵌入式操作系统(μC/OS-II、μCLinux和嵌入式Linux)作分析。

    μC/OS-II嵌入式实时内核全世界数百种设备已经在使用μC/OS-II,包括手机、路由器、不间断电源、飞行器、医疗设备和工业控制设备。μC/OS-II已经有ARM7TDMI、ARM9和StrongARM等各种ARMCPU的移植,支持包含Atmel、Hynix、Intel、Motorola、Philips、Samsung、Sharp等公司的ARM核的CPU.μC/OS-II的移植也相当容易,与CPU相关的代码包装在三个文件中,它们是os_cpu.h、os_cpu_a.asm和os_cpu_c.c.μC/OS-II有60多个系统调用,覆盖任务、定时器、信号量、事件标志、邮箱、队列和内存管理,已经包含了传统嵌入式操作系统内核(如PSOS,VRTX)的功能,还支持互斥型信号量,这是90年代的嵌入式操作系统内核,如VxWorks和VRTXsa才有的技术。

    μC/OS-II因为是可抢占的实时内核,所以μC/OS-II与商业嵌入式实时内核在性能上没有什么差异,μC/OS-II没有用户态和内核态,任务(线程)或中断和任务切换的响应可以很快,主要是和ARMCPU相关的。最新的2.7x版本还增加了算法以避免在移植中修改堆栈指针,这样可以保证μC/OS-II在不同的CPU上运行更稳定,移植更方便。μC/OS-II目前除了内核外还有商业化文件系统μC/FS,图形系统μC/GUI以及任务调试工具μC/KA和μC/View,但是μC/OS-II自己目前还没有TCP/IP协议系统。

    总的来说,μC/OS-II是一个非常容易学习,结构简单,功能完备和实时性很强的嵌入式操作系统内核,适合于各种嵌入式应用以及大专院校教学和科研。最后需要说明,μC/OS-II不是免费软件,任何人学习使用μC/OS-II需要购买《嵌入式实时操作系统μC/OS-II》一书,使用μC/OS-II的产品需要购买产品生产授权,购买了此授权的还可以得到开发期间的技术支持和升级服务。

    μCLinux操作系统μCLinux是Linux小型化后,适合于没有MMU(内存管理单元)的微处理器芯片而裁剪成的操作系统,如果ARMCPU系列中的ARM7TDMI、ARM940T等产品希望使用Linux操作系统,只能用μCLinux,当然,μCLinux也支持MotorolaDragonball、Coldfire等其它中低端嵌入式处理器。

    μCLinux保持了传统Linux操作系统的主要特性,包括稳定、强大的网络和文件系统的支持,μCLinux裁剪了大量的Linux内核以缩小尺寸,适合象512k/bRAM、1M/bFlash这样小容量、低成本的嵌入式系统。μCLinux系统小型化的另一简化是采用了μCLib库替代Linux的Glib库,使用μCLib可以大大减少应用程序的代码尺寸,对于中小型嵌入式应用,μCLib功能可以满足需要,所以目前即使是某些采用Linux2.4.嵌入式Linux操作系统这里要讨论的是可以嵌入在ARMCPU上的,具有MMU功能的Linux操作系统,也可以称是嵌入式Linux操作系统。与微软公司的软件不一样,Linux不是由一家公司所拥有、维护开发的,Linux在市场有多种发行版本,所有发行版本都包含一样的Linux内核、基本工具和应用,不同的发行版本主要是在附加的工具链、应用、配置以及各种内核补丁上有所不同。嵌入式Linux主要是在实时性增强、内核精简和裁减、支持多种CPU结构(如ARMCPU)等方面做了改进和提高。

    使用嵌入式Linux系统有两种途径:第一是用户自己装配(称为DIY内核),你可以找到全部Linux代码,或直接到ARMCPU的源代码树下linux.org.uk“》www.ARMlinux.org.uk找到所需要的Linux版本的移植,或者某些半导体公司,如三星、Motorola在自己的网站或在自己的ARM评估板含有一个最小Linux内核系统。如果这个最小内核没有包含GCC/GDB工具链,可能还要到GNU的网站下载全部的源代码,然后再编译生成所需要版本的ARM工具链和应用程序库,这个过程是相当耗时和困难的。还需要指出,这种DIY内核的配置,添加应用和驱动程序也是不标准的和复杂的,这是嵌入式系统的特殊性所在。

    第二是选择一个商业化的嵌入式Linux操作系统平台。商业化的嵌入式Linux版本是针对嵌入式处理器,如ARM所优化设计的,支持各种半导体厂家的评估板和主要的设备驱动,商业化的嵌入式Linux包含了文件系统、应用、实时性扩展和技术支持培训服务,现今国外著名的商业化嵌入式Linux产品有:Monta Vista Linux、Bluecat Linux、Timesys Linux、Metrowork Linux、Vlinux和Redhat Linux等,

    国内也有红旗、中软、新华嵌入式Linux Monta Vista Linux是Monta Vista软件公司于1999年推出的,它是目前全球优秀的嵌入式Linux操作系统和工具供应商,Monta Vista在嵌入式Linux的实时性、交叉开发工具、高可用性、动态电源管理等Linux技术要点方面具有领先地位。MontaVistaLinux最版本是3.1,采用Linux2.4.20,针对8种CPU系列(包含ARM和Xscale)优化定制的商业化版本。

    选择象Monta Vista Linux这样商业化嵌入式Linux,可以让用户把时间和资金放在应用软件和特定的硬件接口和设备驱动程序,使用商业化嵌入式Linux可以得到一定时间(一般是1年)的技术支持,升级和培训(这很重要,因为Linux是每天都在变化的)。

    商业化嵌入式Linux目前除国内的产品外,价格还是很昂贵的,根据配置和服务时间,大约从几千到几万美元,多数国内用户从资金和心理上还很难承受,商业化嵌入式Linux开发工具相对于Microsoft和象Tornado/VxWork的开发工具,在易于使用和丰富性方面还待于提高和改进。

    同样作为Linux操作系统,笔者推荐使用带有MMU的嵌入式Linux,而不是mCLinux,因为绝大多数新的ARMCPU都是AMR9核,它们都带有MMU了,无论是开放源码的Linux社区还是商业化的嵌入式Linux公司的支持和维护都比mCLinux要好要快和丰富得多。

    结语

    前面我们对三种在ARMCPU上较为流行的嵌入式操作系统作了详细的分析,在进入一个总结之前,笔者还想提到几个在国际上很有名气的嵌入式操作系统,它们是WindRiver公司的VxWorks、ATI的Nucleus、iTron和WinCE,但它们在ARMCPU的应用不多见,介绍从略。

    最后归纳一下选择一个合适的ARMCPU的嵌入式操作系统的几个重要因素:第一是应用。如果你想开发的嵌入式设备是一个和网络应用密切相关或者就是一个网络设备,那么你应该选择用嵌入式Linux或者mCLinux,而不是mC/OS-II.第二是实时性。没有一个绝对的数字可以告诉你什么是硬实时,什么是软实时,它们之间的界限也是十分模糊的,这与你选择什么样的ARMCPU,它的主频、内存等参数有一定的关系。如果你使用加入实时补丁等技术的嵌入式Linux,如MontaVistaLinux(2.4.17版本),最坏的情况只有436微秒,而99.9%的情况是195微秒。考虑到最新的Linux在实时性方面的改进。它可以适合于90~95%的各种嵌入式系统应用。当然,你如果希望更快的实时响应,如高速的A/D转换需要几个微秒以内的中断延时,可能采用mC/OS-II是合适的。当然,你采用象Vxworks这样传统的嵌入式操作系统也可以满足这样的强实时性要求。

    第三是开发工具。显然,目前mC/OS-II、mCLinux和嵌入式Linux的开发工具与商业嵌入式操作系统工具还有一些差距,目前在ARMCPU上广泛流行和使用的是ARM公司SDT/ADS工具链,产品无论在功能、稳定性和众多的第三方厂商支持方面都很好,唯一不足的是缺少对嵌入式Linux操作系统的支持,SDT/ADS的升级产品RealView计划支持GCC和嵌入式Linux,但目前还没有看到,mC/OS-II可以使用ARMSDT/ADS,但没有操作系统调试功能。

    第四是所选择的ARMCPU和参考板,象ARM7TDMI和ARM940T(如S3C2500/2510)核是不能使用嵌入式Linux的,如果想用Linux,只能用mCLinux,如果想用VxWorks,

    需要了解一下提供评估板的公司是否有BSP(板支持包),VxWorks自己只有少数ARM公司评估板的支持。

    最后是价格和技术服务。在考虑购买商业嵌入式操作系统时,会遇到是买还是自己做的问题,这是很正常的,尤其是在采用开放源代码技术时,这个问题就更加突出。有一点需要注意的是,有些产品如VxWorks是既按用户数收取开发费,也按用户产品售出的实际数量收取每个VxWorks软件运行的版税。mC/OS-II只是收取每种产品一次性版税(不限数量)。Linux无论是mCLinux还是嵌入式Linux(即使是商业版本象MontaVistaLinux)是不收版税的,商用嵌入式Linux是以服务费或订阅方式收取开发时的费用。很明显,国外产品价格是贵一些,但不能不承认他们在嵌入式操作系统的技术已经远远走在前方。

    更多相关内容
  • 选择ARM CPU的操作系统

    2020-08-14 17:28:46
    本文就目前国内在ARM CPU上广泛采用的三种嵌入式操作系统(mC/OS-II、mCLinux和嵌入式Linux)作分析。
  • 嵌入式操作系统 ARM CPU的软件基础 从8位/16位单片机发展到以ARM CPU核为代表的32位嵌入式处理器,嵌入式操作系统将替代传统的由手工编制的监控程序或调度程序,成为重要的基础组件。更重要的是嵌入式操作系统对...
  • 第一是应用。如果你想开发的嵌入式设备是一个和网络应用密切相关或者就是一个网络...显然,目前uC/OS-II、uCLinux和嵌入式Linux的开发工具与商业嵌入式操作系统工具还有一些差距,目前在ARM CPU上广泛流行和使用的是
  • 我们的一个业务是在Intel CPU的电脑上,进行深度学习模型算法的开发。模型有用到OpenCV,Pytorch,还有QT界面,大多数使用的是图像处理和CNN特征提取和分类的功能...随后采用docker,部署整个环境到ARM CPU的服务器上。


    前言:一般的深度学习项目,训练时为了加快速度,会使用多GPU分布式训练。但在部署推理时,为了降低成本,往往使用单个GPU机器甚至嵌入式平台(比如 NVIDIA Jetson)进行部署,部署端也要有与训练时相同的深度学习环境,如caffe,TensorFlow等。由于训练的网络模型可能会很大(比如,inception,resnet等),参数很多,而且部署端的机器性能存在差异,就会导致推理速度慢,延迟高。这对于那些高实时性的应用场合是致命的,比如自动驾驶要求实时目标检测,目标追踪等。基本做法都是基于现有的经典模型提出一种新的模型结构,然后用这些改造过的模型重新训练,再重新部署。

    一、 模型部署CPU性能分析

    我们的一个业务是在Intel CPU的电脑上,进行深度学习模型算法的开发。模型有用到OpenCV,Pytorch,还有QT界面,大多数使用的是图像处理和CNN特征提取和分类的功能,处理的是摄像头输入视频,图片这两类数据。考虑到要求实时处理,我们设计的各个功能模块,能够20fps运行和显示,以及在minutes时间内,输出后处理分析的结果,就能达到预定效果。随后采用docker,部署整个环境到ARM CPU的服务器上。

    问题出现在这里:

    • 使用Intel CPU在本地开发,模型速度在纯CPU上,能够达到20fps,50-100ms处理完一个图像;
    • 而部署到ARM CPU的服务器上,模型速度1fps,也就是说1000ms左右,加上后处理,20s处理一次数据。而且加载深度学习模型,需要耗时几十分钟,整体性能下降100x。

    本文就针对深度学习模型的不同CPU架构下,如何高效部署,以及部署的注意事项,和性能差的关键因素,进行分析。提升大家对不同架构部署的性能考虑和定量认识。 大家在ARM ARM64架构,ARM v8指令集,intel core cpu,xeon cpu,包括ARM aarch64的M1芯片计算部署,都会遇到类似问题。可以查看下面的分析,对关键点进行处理。

    1.1 开发阶段CPU—Intel X86架构

    我们在开发阶段,采用的intel的CPU,core-i7-10875H @GHz 2.30GHz。8核16线程,内存16G,采用NVIDIA-GTX2060GPU。下图是我们采用的Intel CPU,我们在这个电脑上部署测试了性能。Intel CPU有OpenMP+MKL-DNN这些深度学习加速库,速度相对没有指令集优化的有很大提升。

    基频2.3GHz,睿频5.1GHz。由于intel x86架构的CPU,单核能够超频处理,所以在测试的时候,其单核性能也许会跑到5GHz的处理速度。当我们的运算代码,测试代码,没有做多线程优化的时候,跑出来的结果,很有可能是单核计算的(大多数Intel CPU服务器,能跑最大性能,给CPU尽量跑满)。因此,intel CPU跑出的性能比ARM 架构服务器CPU跑出的性能,快差不多2倍。ARM CPU总是跑不满。

    在这里插入图片描述
    我们在开发过程中,实际测试的每一个功能,协同CPU和GPU,都能达到需要的速度。也就是20fps处理基本的图像,后处理加分析,也能在几百个ms给出结果。因此,决定部署到服务器上,进行测试。
    下面是我们的开发阶段的统计图。每一个功能都有性能记录。

    在这里插入图片描述
    我们也统计了CPU和GPU的性能占用率等信息。不同功能消耗的CPU和内存的利用率统计如下。目前的开发平台配置是8核16线程。内存16G,GTX2060 GPU。

    在这里插入图片描述

    1.2 测试阶段CPU—ARM架构

    在测试阶段,我们采用的CPU是飞腾的ARM架构的CPU,使用的arm-cortex a53指令集。FT-2000+/64 is a 64 core ARM server SoC designed by Phytium and introduced in 2019. Fabricated on TSMC’s 16 nm process, the chip operates at up 2.3 GHz with a TDP of 96 W. This chip is designed for server, communication, and infrastructure applications.

    ARM 架构的CPU相对X86架构的CPU,能效比,功耗,耗电量,更低。但是,单核的计算力,弱于Intel CPU。所以,在服务器端,基于电量,服务的数量,能效比等多个因素,多采用能耗更低,性价比更高的ARM版本的CPU。单说服务器,其多采用64核,128核等,多核心来应对各种需求,弥补单核算力不足的问题,用核心堆出来的算力。ARM 架构的服务器,用的是定频,不能超频,这款飞腾的CPU采用的2.3GHz。下图是我们使用的ARM架构CPU的相应信息。采用ARM v8.0指令集。单核性能,其实和我们的桌面级CPU差不多。

    在这里插入图片描述

    1.3 模型出现性能偏差的分析

    Intel的Core 酷睿CPU,单核性能,比服务器端Xeon或者飞腾ARM CPU所采用的ARM架构core的性能要强。而从总体性能上看,飞腾的ARM CPU 和intel的i7 CPU,性能差不多。不可能造成实际部署后,单张人脸检测和单个表情识别性能上,intel CPU比ARM CPU快20倍;微表情处理速度上,ARM服务器端就慢更多,速度差30倍。

    在这里插入图片描述

    因此,我们可以分析,大概是以下几块出的问题:

    1. 架构上的差别。 Intel的CPU是x86架构,飞腾CPU是ARM架构,且ARM的指令集比较老,性能较弱。导致了算力相当的CPU核心,在实际计算过程中,差距明显。且intel下是Windows系统,指令集丰富,指令集优化和高效的kernel更多。相比而言,ARM下的指令集,本身较弱,且服务器采用的麒麟操作系统,是麒麟基于Linux开发的一套国产系统。因此,在算术逻辑上的优化,高效计算kernel的设计方面,指令集上的差别。纯ARM端没有做推理优化。而英伟达的Jetson NX2平台,能够做到100fps,是对他的ARM做了优化,且结合tensorRT做了GPU下的推理优化,整体性能当然有质的提升。

      (补充一句:NVIDIA的Jetson低功耗计算卡,也是ARM CPU加自家的GPU,之所以很快,是英伟达专门对pytorch,TensorFlow等这些库,进行了重新编译和优化,针对他们的Jetson平台,利用TensorRT,在ARM端做了优化,加上结合Jetson 的GPU,速度能够达到50fps等。
      TensorRT是一个高性能的深度学习推理(Inference)优化器,可以为深度学习应用提供低延迟、高吞吐率的部署推理。TensorRT可用于对超大规模数据中心、嵌入式平台或自动驾驶平台进行推理加速。TensorRT现已能支持TensorFlow、Caffe、Mxnet、Pytorch等几乎所有的深度学习框架,将TensorRT和NVIDIA的GPU结合起来,能在几乎所有的框架中进行快速和高效的部署推理。
      TensorRT 是一个C++库,从 TensorRT 3 开始提供C++ API和Python API,主要用来针对 NVIDIA GPU进行 高性能推理(Inference)加速。现在最新版TensorRT是4.0版本。)

    2. 代码优化。 服务器天然拥有更多的核心,多核并行处理,多线程下,更占优势。因此,重构我们的代码,在计算流程上,更加流水线,任务多并行。使用多个线程,处理不同的业务。解耦上一个模块和下一个计算单元的耦合。将代码多线程化,从人脸检测,关键点检测,表情分类,微表情分类,都做成不同的线程和任务。且中间变量的优化处理,尤其重要。关键点检测,依赖人脸检测的结果。后面的表情分类和微表情分析,都依赖先前检测到的人脸,因此,没必要每个阶段都重新进行,人脸检测。中间变量缓存,防止重计算。
      虽然人脸检测,表情分类和微表情分析,是多个业务,但是也避免需要特征(数据)的重复计算。计算一次,多个业务共用。这里就扯出来第三个问题。

    3. 中间数据存放数据库或内存中,禁止写到磁盘。 在数据的存储,变量的转移中,从内存摘取到磁盘,SSD,硬盘等,是最慢的部分,需要避免中间数据的磁盘写入。因为人脸检测的结果,需要在表情分类,微表情分析中用到截取的人脸。我们的代码,在实现过程中,为了防止内存爆炸,且开发的CPU内存是16G,视频序列一长,就会内存爆炸。因此,我们是将内存的人脸,写入到磁盘,在后面需要人脸的相关信息时候,再读取。

      有两个解决方案,1)中间数据存数据库,害怕内存放不下,但是读写入磁盘,非常慢,这时,用数据库来保存中间变量,我们是非结构的无序数据,可以用MongoDB,数据量再大,可以上Hadoop。这个数据库类型是方便快速访问大量数据。这种数据库有自己的一套机制,来存储和索引相应的数据。而且,数据如何保存,存储,容量大了如何操作管理,有自己的一套机制的。因此不用担心内存不足和访存读写慢。(估计有自己的一套读写方案,来避免直接存储jpg图像到磁盘。我们采用的就是存储为jpg图像)

      2)加大内存,内存是DDR4,速度还是比单独写入并读取到磁盘上,快很多。为了避免摘取到磁盘,我们增大内存,16G变为64G或者128G甚至是1T的DDR4。这样就不用担心,存不下中间变量了。这样在后续表情分类,微表情分析上,速度快很多。这样需要考虑,我们的部署应用场景,是长时间一直运行,还是有一个上限,例如,3-5小时,30FPS的图像采集速度。那么大概计算,32G的内存,能够存下3、5小时所产生的的中间变量。

    4. 指令集/架构优化。 在编译过程中,指定编译平台,架构,指令集,或者可以platform-oriented编译。能够使得编译中,尽量靠近目标架构,CPU的特性。面向CPU及其指令集的优化编译,生成的binary文件,比通用指令编译出来的算法,性能要高,计算过程中,由于是定制化的模型和计算架构,因此效率更高。

    除此之外,我们还分析了,也有可能,是pytorch,TensorFlow,未对ARM cortex架构,做优化。最底层的计算图,计算单元,在Intel CPU下,全面优化,计算更快,使用了MKL-DNN,OpenMP等深度学习加速推理库,速度相对没有指令集优化的ARM CPU有很大提升。而针对ARM 的CPU,则没有特殊的指令集优化,导致了相同的计算过程,本身ARM 就要慢上几倍。所以库文件,依赖库,也是有关系的。

    二、Intel v.s. ARM CPU各项性能测试实验

    我们在不同的CPU,不同的服务器上,测试了LSTM和ResNet单独计算的时间。时间也是长短不一。初步怀疑,是pytorch的版本或者指令集优化问题,导致了,相同的代码,有的算得快,有的算的慢。

    包括了:

    1. i5-10400 CPU@2.90GHz。 12 CPU
    2. XEON -E5 2690 CPU v4@2.6GHz。32 CPU
    3. i7-9700 CPU@3.6GHz。 8 CPU
    4. XEON -E5 2680 CPU v4@2.4GHz。56 CPU
    5. mac m1芯片

    下面给出每一台服务器和电脑的CPU配置和跑测试代码的时间记录。

    1. i5-10400

    在这里插入图片描述

    1. XEON -E5 2690

    在这里插入图片描述

    1. i7-9700

    在这里插入图片描述

    1. XEON -E5 2680

    在这里插入图片描述

    2.1 多核多个intel CPU测试

    CPU 型号支持加速指令1 core 测试时间2 core测试时间4核测试时间8核心测试时间
    i5-10400 CPU @2.90GHz 12核 睿频4.3GHz
    Ubuntu 18.04, x86-64,Linux 5.4.0,本地 mkl-threads 6
    OpenMP+MKL-DNN27.63s17.63s9.64s8.0s
    与上同3080ti服务器OpenMP 4.5, 没有MKL-DNN36.44s24.10s16.00s13.25s
    i7-9700k CPU @3.60Hz 8核 睿频4.9GHz torch 1.5 linux 5.4 x86-64,OpenMP+MKL-DNN28.46s15.40s11.1s,6.75s
    Intel Xeon CPU E5-2680 v4 @2.40GHz 2 CPU 56核 睿频3.3 GHz centos linux 7,linux 3.10.0OpenMP+MKL-DNN32.23s18.20s10.72s6.94s
    Intel Xeon CPU E5-2690 v4@2.6GHz,32核,centos linux 7,linux3.10.0 mkl-max-threads=16OpenMP+MKL-DNN36.72s20.44s12.31s7.34s
    飞腾FT-2000+/64 CPU,64核,2.3GHz, 架构ARM 64 操作系统kylin 4.0,内核 linux 4.4OpenMP 4.5,无MKL-DNN501.35s
    100%CPU
    303.8s
    170%cpu
    210.7s
    250%CPU
    112.0s
    510%
    MacBook ARM CPU m1 3.2GHz, aarch64架构,ARMv8-A指令集架构,8核,mkl-max-threads=1没有OpenMP,有MKL-DNN57.10s52.94s49.6s48.62s

    ps:注意事项!! 测试性能的时候,一定要保证,设置的线程数,小于空闲的线程数,而不是强制设置为最大线程数,一旦有其他进程,占用着一些CPU资源。此时强制设置多于可用空闲CPU的线程数时,速度降低非常大,耗时严重。因为程序将严格分配到多个CPU核上,而此时有一些核被占用,需要强制的将这个新的线程去一起抢占。导致速度降低。解释:In our case, we do not use hyper-threading since one thread has fully utilized its physical core resource and adding one more thread to the same physical core will normally decrease the performance due to the additional context switch. (ps:在Windows下面,CPU是看总体利用率的,是12个核都在跑。设置线程越多,分配的计算量越多。)

    飞腾的ARM服务器有一个小问题,设置的核心数,都跑不满。2核 170%, 4核 250%,8核 510%。

    结论与现象分析

    结论与测试现象分析::ARM架构问题,导致了密集型计算非常慢。由于我们测试的是ResNet18,并行计算密集型。ARM架构下,pytorch对于ARM的优化不友好,没有做指令集优化,单核性能差距,没有对深度学习库做指令集优化,底层数学库,MKl,MKL-DNN,OpenMP等,综合导致了在看似性能不错的ARM CPU上(2.4GHz, 64核),跑出的速度,非常慢。

    还有一个问题需要注意,查看你配置的docker,配置和部署,是否出问题。如果你的docker是网上下载的别人已经构建好的,只做移植,没有做面向目标架构的优化。特别是编译构建pytorch,OpenCV这些库文件中,在编译过程中,包括目标平台设置,指令集设置,优化参数设置。现有的docker,没有实际在ARM架构上,定制化编译的性能好。这个从docker模拟器中,docker内部测试,外部测试结果可以看出。因此,要保证你部署的docker也是正确的。我已经验证了我们做的docker 是正确的。

    • 结论:有无mkl-DNN,影响是一部分,大于1.5-4倍的速度差距。 下面是对MKL-DNN对模型加速的影响测试数据。
    1. 下面是我对mkl-dnn,有无这个模块的计算分析。在robo intel core CPU这台服务器上,有两个环境,一个是有OpenMP+mkl-dnn的,一个是只有OpenMP的环境。
      在这里插入图片描述
      这个是有mkl-dnn 的pytorch环境。有mkl环境的pytorch,开启mkl 5.65s,未开启mkl 6.35。

    2. 下面这个是没有mkl-dnn,只有OpenMP的环境配置。没有mkl下,跑出成绩为9.63s。
      在这里插入图片描述

    3. 下面是另外一个intel xeon CPU服务器的配置。在eval模式下,开了mkl-dnn比没有开mkl的,时间要少1s。速度快1s。3.27s mkldnn设置, 4.10s 未设置mkldnn。 占cpu 2800%。
      在这里插入图片描述

    4. 下面是intel core i7 CPU服务器的配置。在eval模式下,开了mkl-dnn时间为7.25s左右,没有开mkl-dnn设置的,为9.42s。 速度快了2s。
      在这里插入图片描述

    5. 下面是我们,真正部署的服务器,麒麟系统,飞腾芯片这款ARM CPU。
      在这里插入图片描述

    如图所示,没有mkl,没有mkl-dnn。总的影响是:单核cpu算力倍率 x 没有mkl-dnn倍率 x ARM pytorch计算性能差距与intel差别:

    性能差距 = 服务器CPU与intel cpu单核性能差距(单核20.4/10.05=2~2.5) x (开启mkl/未开mkl =4.1/3.27=1.1~1.2 )x(有无mkl-dnn =9.63/6.35=1.5 ) x(ARM 架构下依赖库计算的性能差 46.8/11.45s =4 ~7 ) = 13.2~31.5倍。 因此,我们做实验统计的速度差的比值倍数,是合理的。

    所以,综上所述:有没有OpenMP支持,速度影响一部分。在1-2s内的影响。所采用的pytorch版本是否支持mkl-dnn,影响一部分。在mac ARM m1芯片下,开启mkl-dnn,速度比没有开启快4s。44s 与 48s的差别。M1 的ARM平台只有mkl-dnn,没有OpenMP指令集,no avx指令集,速度也比较慢。我们的Intel CPU平台,都是支持mkl-dnn。单纯没有mkl-dnn,速度差距不是太明显,只是一部分。

    速度差距这么大,是多方面因素造成的。包括了本身CPU性能,深度学习库的底层加速指令集是否支持和优化,综合造成的。

    2.2 纯单核心CPU计算性能测试

    我们设置了几个小的计算代码,包括计算log+cos的函数,和计算是否是素数的函数。for 循环 20000000次。测试的表格如下:其中,intel core cpu性能强于xeon服务器CPU。因为单核性能,core CPU强于xeon CPU,能超频。

    i5 10400 CPU @2.90GHz8.63s+8.18s
    9700k CPU @3.60Hz7.11s+6.85s
    Xeon CPU E5-2680 v4 @2.40GHz 南京11.97s+10.05s
    Intel Xeon CPU E5-2690 v4@2.6GHz 牛总12.8s+11.2s
    i7-4930K CPU @ 3.40GHz18.5s+12.40s
    ARM m1芯片10.6s +9.8s
    国产飞腾ARM 芯片 服务器22.8s+20.4s 跑满单核100%

    飞腾ARM芯片,在单核计算性能上,就比intel CPU慢2+倍。然后加上上面所提到的:pytorch在ARM 上,优化不是很好。

    再次验证了我们的速度差距的公式,也就是速度分解因子:

    性能差距= 服务器CPU与intel cpu单核性能差距(单核20.4/10.05=2~2.5) * (开启mkl/未开mkl =4.1/3.27=1.1~1.2 )*(有无mkl-dnn =9.63/6.35=1.5 ) * (ARM 架构下依赖库计算的性能差 46.8/11.45s =4 ~7 ) = 13.2~31.5倍。

    三、补充支撑材料

    我们上述的实验分析,也从多个论文和官方文件给出的性能评测,找到了对应的支撑点。证明了我们所提出的原因,是正确的,和实际存在的。造成相同深度学习模型,在ARM CPU 和intel CPU 上部署,差距十几二十倍的效率,是多方面造成的。需要对症下药。

    Optimizing CNN Model Inference on CPUs.

    ​ 这篇论文,分析了CPU平台,做推理优化的各种方法,主要是两类:算子级别的算子融合,计算图级别的图优化方法。进行了operation-level和graph-level的优化。在对比实验中,可以看到,ARM CPU比intel和AMD的CPU,相同的模型,相同的框架下,mxnet和TensorFlow框架下,都慢5-10倍。基本上表明了,在ARM 的CPU上,进行推理和训练,优化pytorch,TensorFlow框架等问题,本身就要慢10倍左右。这是ARM 架构造成的。

    在这里插入图片描述

    第二个结论是,多线程的个数,当大于8个线程时,所获得的gain不大。当然,文章提出的方法,能够最大化的获得多线程的gain。按照传统的mxnet和TensorFlow框架下的性能看,当num threads在10的时候,已经是瓶颈了。上面这些对比实验和数据,也验证了我们所提出的问题点,bottleneck也是正确的。其中,mxnet,TensorFlow,利用了mkl-dnn,OpenMP,OpenBLAS,Eigen等多个优化加速库。和我们的验证对比点和配置环境,是一样的。
    在这里插入图片描述

    3.1 参考资料

    This page details benchmark results comparing MXNet 1.3.0 with MKLDNN vs without MKLDNN (integration proposal). The results clearly shows that MKL-DNN boosts inference throughput between 6x to 37x, latency reduced between 2x to 41x, while accuracy is equivalent up to an epsilon of 1e-8.

    https://cwiki.apache.org/confluence/display/MXNET/MXNet+with+Intel+MKL-DNN±+Performance+Benchmarking

    关于mkl-dnn库的介绍。

    mkl-dnn加速的例子。

    Training-Deep-CNNs-w-Horovod-on-Intel-HPC-Architecture

    这里面,讲了有intel mkl-dnn和无mkl-dnn的延迟和性能比较。
    在这里插入图片描述
    这六个模型,都比没有使用mkl-dnn的,快1.25x ~ 2.5x。

    在这里插入图片描述
    throughput performance of TensorFlow with MKL DNN for the four models are better than Tensorflow without Intel MKL-DNN (baseline).

    Improving TensorFlow* Inference Performance on Intel® Xeon® Processors using MKL-DNN

    3.2 测试小技巧

    由于在测试过程中,有CPU是被root下的未知进程给占用的。例如我们的一台2080Ti的服务器,root下有一个未知的进程,总是占用600%的CPU。我们一共才8核,未知进程就占用6核。此时,各种测试速度,都不正确,时间异常的久。为了准确测试,我们采用cpulimit命令,来限制某个进程号pid的资源占用。

    apt-get install cpulimit

    cpulimit -p pid -l 20 (pid是进程号, -l 20是限制在20%。要根据核心cpu数来算。 有些情况20%是要分摊的。)

    hostnamectl 查看Linux版本号

    lscpu 查看cpu型号

    -(ps: 如果在深度学习训练效率,加快GPU的推理时间,充分利用GPU计算等效率问题上有疑问。该如何发挥服务器的最大性能,请查看我的这篇文章。讲述了联合训练这一类GPU,CPU协同训练等。)
    深度学习PyTorch,TensorFlow中GPU利用率较低,CPU利用率很低,且模型训练速度很慢的问题总结与分析

    如果有用,记得点赞👍加收藏哦。!!!!

    展开全文
  • 自己写的单周期 ARM CPU 设计完整代码,配合博文使用https://mp.csdn.net/mp_blog/creation/editor/124206057 免费提供下载,只是想看下下载量而已
  • arm_now是一款qemu强大的工具,可以即时在arm cpu,mips,powerpc,nios2,x86等平台上设置虚拟机,以进行反向,利用,模糊测试和编程。 安装 # pip3 install ...
  • 基于ARM CPU LPC2132的光电液位挠度传感器的硬件构成、原理及性能分析。以山西高速公路小沟特大桥的安全监测系统为实例,具体介绍本传感器的使用情况。
  • 香港科技园获ARM CPU授权.pdf
  • ARM CPU总结

    千次阅读 2019-02-12 19:09:23
    ARM CPU总结
                   

    1. ARM目前的处理器核心架构分类

     

    2. ARM Cortex-A系列处理器对比

           从图示可以看出,Cortex-A系列是最新的开放式操作系统的高性能处理器,是ARM针对智能手机和MID平板推出的一系列处理器。ARM7、9、11则是经典系列,也就是上一代处理器,其中ARM9、ARM11架构被采用的比较多,有不少中端MID平板的处理器采用这种构架。

           Cortex-A系列和ARM7、9、11系列最大的区别就是采用了不同的指令集,Cortex-A系列采用的是ARMv7指令集,而ARM11采用的是ARMv6指令集。所谓指令集,通俗的理解就是一种运算方式,是提高CPU运行效率的最有效工具之一。指令集越新,代表这种架构的运算方式更好,性能也就越高,所以,目前最新的ARMv7指令集,相较之前发布的ARMv6、ARMv5指令集有明显提升。

    3. ARM处理器技术特性对比

     

         ARM9:指令集ARMv5,定位于中低端处理器,提供约1100 DMIPS的性能。
         ARM11:指令集ARMv6,定位于中端通用处理器,提供约1200 DMIPS的性能。
         Cortex-A8:指令集ARMv7,第一代采用ARMv7指令集的新架构,定位于高端市场,可提供经济有效的高性能,在600MHz-1GHz的频率下,提供的性能超过2000 DMIPS。
         Cortex-A9:指令集ARMv7,A8的加强版本,并且开始支持多核,可提供800MHz-2GHz的标准频率,每个内核可提供2500DMIPS的性能。
         Cortex-A5:指令集ARMv7,A9的简化版本,用于取代ARM11,主打低成本市场,在400-800MHz的频率下,提供的性能超过1200DMIPS,暂无产品上市。
         Cortex-A15:指令集ARMv7,目前最新最强的ARM处理器,暂无产品上市。

    4.主流ARM处理器性能对比

    目前ARMv7指令集的CPU以Cortex-A8和A9为主,两者的区别不同的是,Cortex-A8架构设计之初仅仅考虑单核运算,无法实现多核运算,只能通过提升主频、改进工艺等方式提升性能;而Cortex-A9则是在设计时就充分考虑了单核与未来多核的趋势,可以后期扩展,因此A9架构的处理器,除了单核产品,也可以扩展至双核甚至四核处理器(Cortex-A9 MPCore多核处理器)的。另外,在L2(二级高速缓存)的规格上,A8最多只能支持2MB,而A9则可以支持到8MB,这也在一定程度上提升了处理器的性能,可以说,在最领先的ARMv7指令集内,Cortex-A9代表了目前最领先的架构水平。

     

     

     

     

     

     

     

               

    再分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow

    展开全文
  • iPad苹果A4处理器揭秘:ARM CPU GPU.pdf
  • ARM CPU CS89712与C5510 DSP的接口设计.pdf
  • ARM CPU在桥梁挠度监测系统中的应用.pdf
  • Lauterbach TRACE32工具简化MIPS和ARM CPU结合设计的调试.pdf
  • VR虚拟现实如何选择ARM CPU的操作系统 如何选择ARMCPU的操作系统 从8位/16位单片机发展到以ARMCPU核为代表的32位嵌入式处理器嵌入式操作系统将替代传统的由手工编制的监控程序或调度程序成为重要的基础组件更重要的...
  • 杭州国芯授权获得ARM CPU用于下一代机顶盒芯片设计.pdf
  • Mips和领先的微处理器开发工具供应商 Lauterbach宣布,两家公司已开始合作使 Lauterbach广受欢迎的 TRACE32工具能够更轻松地为 MIPS异构 CPU系统或结合 MIPS CPUARM CPU 的系统进行调试。Lauterbach将在即将举行...
  • ARM CPU S3C44B0X在水表智能抄表系统中的应用.pdf
  • ARM CPU S3C44B0X与C54X DSP的接口设计.pdf
  • htop用于监控arm64板上的CPU频率,CPU温度,GPU温度,VCore 扩展信息:内核版本,操作系统版本,Armbian版本,eth0 IP,eth1 IP,wlan0 IP,wlan1 IP,别名 可配置的处理程序 分行: 主RK3399主线内核 BSP_RK3399 ...
  • GBase 8a支持国产CPUARM CPU,华为泰山的鲲鹏(Kunpeng),曙光的海光(Hygon),申威(SW).pdf
  • 选择ARM CPU的操作系统μC_OS-Ⅱ,μCLinux,还是Linux.pdf
  • ARM STAR CPU.pdf

    2020-12-14 17:42:45
    arm中国推出的arm star MCU介绍文档,阐述了arm star与常用的arm Cortex-M系列MCU之间的异同以及优势方面
  • 第二部分介绍在ARMC CPU上是如何支持内存管理的。操作系统对内存的管理的目的就是满足应用程序(当然也有部分内核代码)的内存申请和释放,而内存的申请和释放都是围绕CPU硬件上的内存管理单元(MMU)而进行的。所以...
  • Unreal Engine 4: Mobile Graphics on ARM CPU and GPU Architecture 特别好的关于ue的文章
  •  Cortex-A57是ARM针对2013年、2014年和2015年设计起点的CPU产品系列的旗舰级CPU,它也是ARM首次采用64位ARMv8-A架构CPU,而且通过Aarch32执行状态,保持与ARMv7架构的完全后向兼容性。除了ARMv8的架构优势之外,...

     

    为了给大家介绍一个更直观的感受,请看下面这张图
    ARM Cortex-A系列处理器性能差异对比

      如图所示,绿色的部分都是v7-A的架构,蓝色的是v8-A架构,基本上绿色都是可以支持到32和64位的,除了A32,只支持到32位。在右边的每个部分,比如说需要高效能的最上面的A15-A73这个部分是最高效的,接下来就是比较注重整个效率的部分了,中间那个部分是比较高效率的,最下面那栏的是效率最好的,在电池的效能方面达到了最好的标准。

      如果非要给他们一个排序的话,从高到低大体上可排序为:Cortex-A73处理器、Cortex-A72处理器、Cortex-A57处理器、Cortex-A53处理器、Cortex-A35处理器、Cortex-A32处理器、Cortex-A17处理器、Cortex-A15处理器、Cortex-A7处理器、Cortex-A9处理器、Cortex-A8处理器、Cortex-A5处理器。

    ARM Cortex-A系列处理器性能差异对比

    架构处理器家族
    ARMv1ARM1
    ARMv2ARM2ARM3
    ARMv3ARM6, ARM7
    ARMv4StrongARMARM7TDMIARM9TDMI
    ARMv5ARM7EJARM9EARM10EXScale
    ARMv6ARM11ARM Cortex-M
    ARMv7ARM Cortex-AARM Cortex-MARM Cortex-R
    ARMv8Cortex-A50[9]

    下面我们将详细了解近年来ARM公司发布的数款A系列处理器。ARM公司的Cortex-A系列处理器适用于具有高计算要求、运行丰富操作系统以及提供交互媒体和图形体验的应用领域。

      Cortex-A73

    ARM Cortex-A系列处理器性能差异对比

      这是ARM 2016年发布的最新A系列处理器,Cortex-A73支持全尺寸ARMv8-A构架,ARMv8-A是ARM公司的首款支持64位指令集的处理器架构,包括ARM TrustZone技术、NEON、虚拟化和加密技术。所以无论是32位还是64位,Cortex-A73都可以提供适应性最强的移动应用生态开发环境。Cortex-A73包括128位 AMBR 4 ACE接口和ARM的big.LITTLE系统一体化接口,采用了目前最先进的10nm技术制造,可以提供比Cortex-A72高出30%的持续处理能力,非常适合移动设备和消费级设备使用。预计今年晚些时候到2017年,Cortex-A73处理器将会逐渐覆盖到我们合作伙伴的高端智能手机、平板电脑、翻盖式移动设备、数字电视等一系列消费电子设备。

      Cortex-A72

    ARM Cortex-A系列处理器性能差异对比

      Cortex-A72最早发布于2015年年初,也是基于ARMv8-A架构,采用台积电16nm FinFET制造工艺,Cortex-A72可在芯片上单独实现性能,也可以搭配Cortex-A53处理器与ARMCoreLinkTMCCI高速缓存一致性互连(CacheCoherentInterconnect)构成ARMbig.LITTLETM配置,进一步提升能效。在相同的移动设备电池寿命限制下,Cortex-A72能相较基于Cortex-A15的设备提供3.5倍的性能表现,相比于Cortex-A57也有约1.8倍的性能提升,展现出了优异的整体功耗效率。Cortex-A72是目前基于ARMv8-A架构处理器中使用最广泛的处理器之一,主要其应用市场包括高端智能手机、大屏幕的移动设备、企业网路设备、服务器、无线基台、数字电视。

      Cortex-A57

    ARM Cortex-A系列处理器性能差异对比

      Cortex-A57是ARM针对2013年、2014年和2015年设计起点的CPU产品系列的旗舰级CPU,它也是ARM首次采用64位ARMv8-A架构CPU,而且通过Aarch32执行状态,保持与ARMv7架构的完全后向兼容性。除了ARMv8的架构优势之外,Cortex-A57还提高了单个时钟周期性能,比高性能的Cortex-A15 CPU高出了20%至40%。它还改进了二级高速缓存的的设计以及内存系统的其他组件,极大的提高了能效。Cortex-A57将为移动系统提供超高能的性能,而借助big.LITTLE,SoC能以很低的平均功耗做到这一点。其主要面对的是中高端电脑,平板电脑以及服务器产品。

      Cortex-A53

    ARM Cortex-A系列处理器性能差异对比

      Cortex-A53同样是采取了ARMv8-A架构,能够支持32位的ARMv7代码和64位代码的AArch64执行状态。A53架构特点是功耗降低、能效提高。其目标是28nm HPM制造工艺下、运行SPECint2000测试时,单个核心的功耗不超过0.13W。它提供的性能比Cortex-A7处理器的功率效率更高,并能够作为一个独立的主要的应用处理器,或者搭配Cortex-A57处理器构成big.LITTLE配置。Cortex-A53在相同的频率下,能提供比Cortex-A9更高的效能。其主要面对的是中高端电脑,平板电脑,机顶盒,数字电视等。

      Cortex-A35

    ARM Cortex-A系列处理器性能差异对比

      Cortex-A35是基于ARMv8-A 64位架构设计的一款低功耗CPU,其目的是为了取代此前32位Cortex-A7和Cortex-A5两颗老核心,采用和A53/A7类似的顺序有限双发射设计,同时融入了A72的一些新特性,并在前端重新设计了指令预取单元,提升了分支预测精度。此外,A35还采用了A53的缓存、内存架构,可配置8-64KB一级指令和数据缓存、128KB-1MB二级缓存,加入了NEON/FP单元,改进了存储性能,支持完整流水线的双精度乘法,还为CPU核心、NEON流水线都配备了硬件保留状态(独立电源域)以提升电源管理效率。在同样的工艺、频率下,A35的功耗比A7低大约10%,同时性能提升6-40%。而对比A53,它可以保留80-100%的性能,但是功耗降低32%、面积缩小25%,能效提升25%。A35还可以和A53、A57、A72等大核心搭配,组成big.LITTLE混合架构系统,进一步提升系统能效。其主要定位于低功耗的低端手机、可穿戴、物联网等领域。

      Cortex-A32

    ARM Cortex-A系列处理器性能差异对比

      这是ARM 新一代构架中,唯一一个 32 位(ARMv7-A )架构的处理器,但 A32 就像是 32 位版的 A35,目标很明显,就是在效能比本来就逆天的 A35 的基础上进一步控制功耗。A32 架构主打芯片面积、功耗控制和能耗比,其停留在 32 位(ARMv7-A 指令集),指令预取单元针对效率进行了重新设计,一、二级暂存、浮点和 DSP 操作性能则针对速度进行了改进,并引入了新的电源管理特性。其支持 TrustZone 安全加密、NEON SIMD 指令集、DSP / SIMD 扩展、VFPv4 浮点计算、虚拟硬件等。A32 可以在 32 位下提供和 A35 一样的性能。但更低功耗,让它的效能比(单位电能产出的性能)比 A35 还要高 10%、比 A5 高 30%、比 A7 高 25%。A35 可以透过提升频率达到 A53 80-100% 性能,也就是说,A32 也可以在 32 位下达到同样的性能等级,这时候的芯片面积只有 A53 的 68%,而功耗则只有 A53 的 61%。

      在 64 位之下,A35 都有代替 A53 架构的实力,而在 32 位中,A32 就已经是完胜所有人的境界了,而且比起 64 位的 A35 架构,32 位的 A32 更适合用在穿戴设备和物联网产品上。

      Cortex-A17

    ARM Cortex-A系列处理器性能差异对比

      A17仍然基于32位ARMv7-A指令集,初期会采用28nm工艺,后期进化到20nm。本质架构和A12一样都是双宽度、乱序发射,仅仅是改进了外部互联,引入了新的一致性总线AMBA4 ACE,可以更快速地连接内存控制器,从而改善性能和能效。得益于这个新的总线,A17可以支持多核心SoC的完整内存一致性操作,能够参与big.LITTLE双架构混合方案,在特定频率、工艺、内存条件下,A17的性能比A12提升大约40%。在某些特定的环境中,A17的性能已经可以和A15处于一个档次了,但是功耗更低、能效更高。虽然在命名上排在Cortex-A15之上,但其定位中端,而不是高端。

      Cortex-A15

    ARM Cortex-A系列处理器性能差异对比

      Cortex-A15最早在2010年发布,基于32位ARMv7-A架构。A15和A9同样具备乱序执行,但是Cortex-A15具备(两倍)的指令发射端口和执行资源,指令解码能力也要高出50%,动态分支预测能力更强(采用了多层级分支表缓存),指令拾取带宽更强(128 bit vs 64 bit),这些都能让A15的流水线执行具备更高的效率。除此以外,A15采用了VFPv4浮点单元设计,能执行FMA指令以及硬件除法指令,相较而言A9的峰值向量浮点性能基本上只有A15的一半。Cortex-A15处理器可以应用在智能手机、平板电脑、移动计算、高端数字家电、服务器和无线基础结构等设备上。

      Cortex-A9

    ARM Cortex-A系列处理器性能差异对比

      ARM Cortex-A9采用ARMv7-A架构,目前我们能见到的四核处理器大多都是属于Cortex-A9系列。 Cortex-A9 处理器的设计旨在打造最先进的、高效率的、长度动态可变的、多指令执行超标量体系结构,提供采用乱序猜测方式执行的 8 阶段管道处理器,凭借范围广泛的消费类、网络、企业和移动应用中的前沿产品所需的功能,它可以兼具高性能和高能效。Cortex-A9 微体系结构既可用于可伸缩的多核处理器(Cortex-A9 MPCore多核处理器),也可用于更传统的处理器(Cortex-A9单核处理器)。可伸缩的多核处理器和单核处理器支持 16、32 或 64KB 4 路关联的 L1 高速缓存配置,对于可选的 L2 高速缓存控制器,最多支持 8MB 的 L2 高速缓存配置,它们具有极高的灵活性,均适用于特定应用领域和市场。

      Cortex-A8

    ARM Cortex-A系列处理器性能差异对比

      ARM Cortex-A8处理器,基于ARMv7-A架构,是目前使用的单核手机中最为常见的产品。Cortex-A8处理器是首款基于ARMv7体系结构的产品,能够将速度从600MHz提高到1GHz以上。Cortex-A8处理器可以满足需要在300mW以下运行的移动设备的功率优化要求;以及需要2000 Dhrystone MIPS的消费类应用领域的性能优化要求。Cortex-A8 高性能处理器目前已经非常成熟,从手机到上网本、DTV、打印机和汽车信息娱乐,Cortex-A8处理器都提供了可靠的高性能解决方案。

      Cortex-A7

    ARM Cortex-A系列处理器性能差异对比

      Cortex-A7采用ARMv7-A架构,它的特点是在保证性能的基础上提供了出色的低功耗表现。Cortex-A7处理器的体系结构和功能集与Cortex-A15 处理器完全相同,不同这处在于,Cortex-A7 处理器的微体系结构侧重于提供最佳能效,因此这两种处理器可在big.LITTLE(大小核大小核心伴侣结构)配置中协同工作,从而提供高性能与超低功耗的终极组合。单个Cortex-A7处理器的能源效率是Cortex-A8处理器的5倍,性能提升50%,而尺寸仅为后者的五分之一。

      Cortex-A5

    ARM Cortex-A系列处理器性能差异对比

      Cortex-A5处理器同样基于ARMv7-A架构,它是能效最高、成本最低的处理器,能够向最广泛的设备提供最基础的 Internet 访问。Cortex-A5 处理器在指令以及功能方面与更高性能的 Cortex-A8、Cortex-A9 和 Cortex-A15 处理器完全兼容 - 一直到操作系统级别。Cortex-A5 处理器还保持与经典 ARM 处理器(包括 ARM926EJ-S、ARM1176JZ-S 和 ARM7TDMI?)的向后应用程序兼容性。其定位于从入门级智能手机、低成本手机和智能移动设备以及基础工业设备。

    展开全文
  • ARM架构与CPU

    千次阅读 2021-02-19 14:16:52
    首先介绍两大主流CPU架构——ARM和x86的构造,然后从性能、扩展能力、操作系统的...ARM架构就是综合考虑指令集的特点、性能等因素,设计CPU、寄存器、运算器等的结构,最后形成基于ARMCPU的处理器架构。 1.什么是ARM架
  • ARM汇编编程基础(一) -- ARM CPU寄存器

    千次阅读 2016-12-05 20:17:40
    本系列文章节选自本人所著《深入浅出嵌入式底层软件开发》。 ...ARM的汇编编程,本质上就是针对CPU寄存器的编程,所以我们首先要弄清楚ARM有哪些寄存器?这些寄存器都是如何使用的? ARM
  • 本文将介绍最小化ARM Cortex-M CPU功耗的方法与技巧

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 139,492
精华内容 55,796
关键字:

arm cpu

友情链接: gpio-tps6586x.rar