ARM Cortex系列(A8/A9/A15/A7) NEON多媒体处理SIMD引擎优化

发布者:心若水仙最新更新时间:2016-07-13 来源: eefocus关键字:ARM  Cortex系列  多媒体处理  SIMD  引擎优化 手机看文章 扫描二维码
随时随地手机看文章
Cortex-A9的NEON多媒体处理器是基于ARMv7的SIMD(Single Instruction Multiple Data)和向量浮点VFPv3(Vector Floating-Point)指令集的,在具体的芯片设计中NEON组件是可选的,NEON处理器是面向音频、视频编解码器、图像处理和语音信号处理以及其他的基带等信息处理领域的。 本文介绍了NEON处理器的基本架构、NEON处理器的并发情况下Cortex-A8和Cortex-A9的区别、NEON的寄存器组和数据类型、NEON编程的针对编译器、汇编器的优化方法以及其他的提高性能的并行方法。

图1. ARM体系结构的演进

Cortex-A9 处理器简介

图2. Coretex-A9处理器的架构框图(View Larger Cortex-A9 处理器 Image)

Cortex-A9 是性能最高的 ARM 处理器,可实现受到广泛支持的 ARMv7 体系结构的丰富功能。Cortex-A9 处理器的设计旨在打造最先进的、高效率的、长度动态可变的、多指令执行超标量体系结构,提供采用乱序猜测方式执行的 8 阶段管道处理器,凭借范围广泛的消费类、网络、企业和移动应用中的前沿产品所需的功能,它可以提供史无前例的高性能和高能效。ARM Cortex?-A9 处理器提供了史无前例的高性能和高能效,从而使其成为需要在低功耗或散热受限的成本敏感型设备中提供高性能的设计的理想解决方案。它既可用作单核处理器,也可用作可配置的多核处理器,同时可提供可合成或硬宏实现。该处理器适用于各种应用领域,从而能够对多个市场进行稳定的软件投资。

Cortex-A9 微体系结构既可用于可伸缩的多核处理器(Cortex-A9 MPCore? 多核处理器),也可用于更传统的处理器(Cortex-A9 单核处理器)。可伸缩的多核处理器和单核处理器支持 16、32 或 64KB 4 路关联的 L1 高速缓存配置,对于可选的 L2 高速缓存控制器,最多支持 8MB 的 L2 高速缓存配置,它们具有极高的灵活性,均适用于特定应用领域和市场。

 

下载 Cortex-A9 白皮书

 

 

 

 

窗体顶端

与高性能计算平台消耗的功率相比,ARM Cortex-A9 处理器可提供功率更低的卓越功能,其中包括:

  • 无与伦比的性能,2GHz 标准操作可提供 TSMC 40G 硬宏实现 
  • 以低功耗为目标的单核实现,面向成本敏感型设备
  • 利用高级 MPCore 技术,最多可扩展为 4 个一致的内核
  • 可选 NEON? 媒体和/或浮点处理引擎

通过共享以下常见需求,Cortex-A9 处理器可提供满足各种不同市场应用需求的可扩展解决方案,包括移动手机以及高性能的消费类产品和企业产品:

  • 通过提高性能、降低功耗来提高能效;
  • 提高最高性能,满足要求更高的应用需求;
  • 能够在多个设备之间共享软件和工具投资;

Cortex-A9 MPCore 多核处理器集成了经验证非常成功的 ARM MPCore 技术以及更多增强功能,以此简化了多核解决方案,并使其应用范围得到扩展。Cortex-A9 MPCore 处理器可提供史无前例的可扩展的最高性能,同时还支持灵活设计和新功能,从而进一步降低和控制处理器和系统级的能耗。借助 Cortex-A9 MPCore 处理器的定向实现,移动设备的最高性能还可在现在的解决方案的基础上不断提高,具体方法是:利用设计灵活性和 ARM MPCore 技术提供的高级功率管理技术,在散热受限以及移动电源预算紧张的情况下维持运行。使用可伸缩的最高性能,该处理器可超过现今类似的高性能嵌入式设备的性能,并可在拓宽市场的基础上进行稳定的软件投资。

Cortex-A9多核处理器是首款结合了Cortex应用级架构以及用于可扩展性能的多处理能力的ARM处理器,提供了下列增强的多核技术:

  *加速器一致性端口(ACP),用于提高系统性能和降低系统能耗

  *先进总线接口单元(Advanced Bus Interface Unit),用于在高带宽设备中实现低延迟时间

  *多核TrustZone® 技术,结合中断虚拟,允许基于硬件的安全和加强的类虚拟(paravirtualization)解决方案

*通用中断控制器(GIC),用于软件移植和优化的多核通信

Cortex-A9 NEON 媒体处理引擎 (MPE)

Cortex-A9 MPE 可用于任一 Cortex-A9 处理器,并可提供一个具有 Cortex-A9 浮点单元的性能和功能以及 NEON 高级 SIMD 指令集实现的引擎,以便进一步提高媒体和信号处理功能的速度。MPE 可扩展 Cortex-A9 处理器的浮点单元 (FPU),提供一个 quad-MAC 以及附加的 64 位和 128 位寄存器集,在每个周期 8 位、16 位和 32 位整型以及 32 位浮点数据量的基础上支持一组丰富的 SIMD 操作。

Cortex-A9 浮点单元 (FPU)

在与任一 Cortex-A9 处理器一起实现时,FPU 可提供与 ARM VFPv3 体系结构兼容的高性能的单双精度浮点指令,该体系结构是与上一代 ARM 浮点协处理器兼容的软件。

物理IP:提供在Cortex-A9处理器上实现低功耗、高性能应用所需的众多标准单元库和存储器。标准单元包括功耗管理工具包,可实现动态和漏泄功耗节省技术,例如时钟门控、多电压岛和功率门控。还提供具有先进的功耗节省功能的存储编译器

  · Fabric IP:Cortex-A9处理器得到广泛的PrimeCell® fabric IP元件的支持。这些元件包括:一个动态存储控制器、一个静态存储控制器、一个AMBA® 3 AXI可配置的内部互连及一个优化的L2 Cache 控制器,用于匹配Cortex-A9处理器在高频设计中的性能和吞吐能力。

  · 图形加速: ARM Mali? 图形处理单元及Cortex-A9处理器的组合,将使得SoC合作活动能够创造高度整合的系统级解决方案,带来最佳的尺寸、性能和系统带宽优势。

  · 系统设计:ARM RealView® SoC Designer工具提供快速的架构优化和性能分析,并允许在硬件完成以前很长时间即可进行软件驱动程序和对时间要求很严格的代码的早期开发。RealView系统发生器(RealView System Generator)工具为基于Cortex-A9处理器的虚拟平台的采用提供超快建模能力。Realview工具中关于Cortex-A9处理器的基于周期的(cycle based)及程序员视角的模型将于2008年第二季度上市。

  · 调试: ARM CoreSight?片上技术加速了复杂调试的时间,缩短了上市时间。程序追踪宏单元技术(Program Trace Macrocell technology)具有程序流追踪能力,能够将处理器的指令流完全可视化,同时配置与ARMv7架构兼容的调试接口,实现工具标准化和更高的调试性能。用于Cortex-A9处理器的CoreSight设计工具包扩展了其调试和追踪能力,以涵盖整个片上系统,包括多个ARM处理器、DSP以及智能外设。

 · 软件开发:ARM RealView开发套件(ARM RealView Development Suite)包括先进的代码生成工具,为Cortex-A9处理器提供卓越的性能和无以比拟的代码密度。这套工具还支持矢量编译,用于NEON媒体和信号处理扩展集,使得开发者无需使用独立的DSP,从而降低产品和项目成本。包括先进的交叉触发在内的Cortex-A9 MPCore多核处理器调试得到RealView ICE和Trace产品的支持,同时也得到一系列硬件开发板的支持,用于FPGA系统原型设计和软件开发。

   

 

作为许多下一代设备的核心,Cortex-A9 处理器通常与许多其他 IP 块集成。

系统 IP

系统 IP 组件对于在芯片上构建复杂的系统至关重要,通过利用系统 IP 组件,开发人员可以显著缩短开发和验证周期,从而节约成本并缩短产品的上市时间。

 

   

工具支持

所有 ARM 处理器均受 ARM RealView? 系列开发工具以及各种第三方工具、操作系统和EDA 供应商的支持。ARM RealView 工具独一无二,所提供的解决方案涉及从概念到最终产品部署的整个开发过程。

 

图3. 基于Coretex-A9核的主要芯片

NEON 多媒体SIMD引擎简介

NEON是一个SIMD数据处理架构,256字节的寄存器堆包含32个64-bit位宽的寄存器或者16个128-bit位宽的寄存器。所有的寄存器都被视为具有相同数据类型的一个向量,支持的数据类型包括有符号或者无符号的8-bit、16-bit、32-bit和64-bit的整型数据或者单精度浮点数据。NEON指令都是针对相同数据类型的通道处理的,即所有通道执行相同的指令操作。如下图4所示。

图4. ARM NEON处理器的SIMD操作

NEON的寄存器组:NEON和VFPv3 浮点协处理器共享寄存器组,这些寄存器和ARM核的寄存器截然不同,NEON还会采用ARM的寄存器作为地址寄存器间接寻址。图5是NEON寄存器的视图,16个128-bit的4字节寄存器Q0~Q15,或者32个64bit的双字寄存器D0~D31,VFPv3的寄存器堆还有32个32-bit的寄存器S0~S31.

图5. NEON和VFPv3协处理器的寄存器堆视图

NEON指令支持的操作数类型包括:有符号或者无符号的8-bit、16-bit、32-bit和64-bit的整型数据(I8、S8、U8、I16、S16、U16、I32、S32、U32、I64、S64、U64)或者单精度浮点数据(F32)。

图6. 单个寄存器组的元素分配

NEON支持的一些数据访问:支持非对齐访问但对齐的访问速度更快,可以通过访问@bits来指定地址对齐的位数,如@32、@64、@128等。加载和存储支持打包的数据类型,即可以有2、3、4个通道的interleave的数据加载和存储,还能在标量和向量间进行数据的移动,但是速度比较慢、还能支持单精度浮点的数据运算。

NEON 指令集

图7. NEON的线性加载和存储指令

图8. 交织的数据加载和存储指令

图9. 使用结构化的加载指令加载RGB数据

vld1.32 {d16-d19}, [r1]!

vmul.f32 q12, q8, d0[0]

vmla.f32 q12, q9, d0[1]

vst1.32 {d24-d27}, [r0]!

NEON的并行优化方法

ARM编译器优化方法

NEON并行化和向量化的编译选项:ARM RVDS 3.0以上版本或者DS-5使用编译选项armcc --vectorize或者Codesourcery 2007q3之后的gcc版本使用如下编译选项使能vfp:-mcpu=cortex-a8 -mtune=cortex-a8 -O3 -mfloat-abi=softfp -mfpu=vfp 或者使用-mcpu=cortex-a8 -mtune=cortex-a8 -O3 -mfloat-abi=softfp -mfpu=neon -ftree-vectorize来使能NEON的并行处理。一般认为RVDS或者DS-5编译器的armcc针对并行处理性能很差,即使调整算法的结构以适合编译器进行NEON指令的优化,但是生成的代码还是难以让人满意。而GCC的自动并行化处理的结果性能更差,针对Android开发,只能采用Google提供的NDK的GCC工具链可以用来开发。但ARM EABI提供了编译器支持的C内联intrinsics。可以参考ARM V7-A的 ABI手册以及arm_neon.h文件。

ARM汇编器的优化方法

使用NEON的intrinsic指令进行优化需要对NEON的指令集非常熟悉,而且使用intrinsics没法控制寄存器分配和内存对齐等,因而很多的NEON的优化还是基于汇编代码。当然手工写汇编代码总是需要很多的额外开销的,而且还要了解ARM EABI编程规范。

NEON编程优化的基本方法

一般NEON优化是针对需要大量数据处理的函数,而函数的基本操作都是先加载数据,然后进行数据处理,最后把计算的结果保存到内存。首先针对NEON数据的加载和存储,可以参考http://houh-1984.blog.163.com/blog/static/3112783420111159169507/,即适当考虑结构化的加载/存储以有效的进行数据加载成为有利于并行处理的方式,当然除了数据加载有利于并行处理,还要考虑数据加载有利于cache性能的优化。然后采用NEON指令进行计算,针对数据访问,可以考虑使用Q0~Q3的参数寄存器以及Q8~Q15寄存器,而对于Q4~Q7寄存器则必须根据EABI的规范在函数调用内保存。

另外就是关需数据的加载类型,一个是数据的对齐,虽然NEON完全支持非对齐访问,但是对齐数据一个是有利于加载、存储,另外一个是也更cache友好,非对齐的数据访问要消耗更多的时钟周期尤其是在非对齐还要跨越cache行的情况下,数据对齐方式可以采用[,:],其中align可以为32、64、128、256位。软件流水是非常重要的优化工具,因为现在的ARM基于RISC的处理器,流水线是必须的,因而针对流水线需要更好的优化方法,虽然NEON的流水线在Coretex-A8和Cortex-A9的处理器上不同,NEON的指令一般都是在一个周期内发出,但是执行结果可能若干个周期才能有效,只有简单的如VSUB、VADD和VMOV指令才能在下一个周期可以用。并发的指令发出也是需要提到的。另外从NEON的寄存器把数据保存到ARM寄存器非常耗时,需要至少20个周期的延时,因而尽量避免这类操作,NEON没有提供除法和求平方根的操作,而VFPv3则存在这些指令。但是由于NEON处理器和VFP单元共用硬件,因而不要混合使用NEON和VFP指令。最后是尽量避免ARM和NEON处理器访问相同的数据区域。

Vld1.8 {D0}, [R1:64]

Vld1.8 {D0,D1}, [R1:128]!

Vld1.8 {D0,D1,D2,D3}, [R2:256]!,R3

Cortex-A8和Cortex-A9的多指令并发有所不同,A8是每次并发两次fetch,而A9除了多次并发外,还能乱序执行,因而指令重排的优化非常重要。一般而言NEON的SIMD优化能提高至少2倍的系统性能,取决于实际处理的位宽。

http://houh-1984.blog.163.com/

http://baike.baidu.com/view/2937500.htm

http://www.arm.com/zh/products/processors/cortex-a/cortex-a9.php

Cortex-A9的NEON多媒体处理器是基于ARMv7的SIMD(Single Instruction Multiple Data)和向量浮点VFPv3(Vector Floating-Point)指令集的,在具体的芯片设计中NEON组件是可选的,NEON处理器是面向音频、视频编解码器、图像处理和语音信号处理以及其他的基带等信息处理领域的。 本文介绍了NEON处理器的基本架构、NEON处理器的并发情况下Cortex-A8和Cortex-A9的区别、NEON的寄存器组和数据类型、NEON编程的针对编译器、汇编器的优化方法以及其他的提高性能的并行方法。

关键字:ARM  Cortex系列  多媒体处理  SIMD  引擎优化 引用地址:ARM Cortex系列(A8/A9/A15/A7) NEON多媒体处理SIMD引擎优化

上一篇:ARM核流水线——ARM7,ARM9E,ARM11,Cortex-A系列处理器
下一篇:将大小计算引擎完美地整合在-起

推荐阅读最新更新时间:2024-03-16 15:00

ARM Cortex-M4和Cortex-M0+中断优先级及嵌套抢占问题
  对于中断优先级配置的需求实际上主要体现在系统存在多个可能的中断源情况下,这时为了保证代码的可靠执行,我们不得不考虑很现实的两个问题,一个是如果两个以上中断同时发生,pending请求到CPU,CPU决策该先进哪一个相应的中断服务Routine,第二个问题是CPU当前已经在响应某个中断服务,此时来了另一个中断请求,是否允许其打断当前中断服务转而响应新的中断请求即我们常说的中断嵌套问题,不要告诉我没考虑过哈(如果真是这样,我只能不客气的说,这样搞单片机是不负责任的,很可能给项目带来潜在的风险bug),那样的话俺也白写了,呵呵。那正题来了,对现在红红火火的ARM Cortex-M4和M0+两个核来说,他们是如何解决这两个问题的呢,因
[单片机]
4412ARM开发板学习笔记(一)
新手在进行开发学习前,建议先看01-迅为电子开发板入门视频。对开发板和开发环境有一定的了解后,不要盲目接线开机。以下是个人的一点经验,和大家分享一下。 补充:这是第一份笔记,主要是提供给刚拿到板子的同学,2、3分钟就可以看完,避免你走歪路。实际上视频上都有,我只是整理了一下。之后我大概不定期会陆续上传一些我的学习笔记分享给大家,希望大家可以给出建议。以后可以的话会整理一下,打包上传,也给后来学习的人一个参考,方便大家共勉。 注:我使用的是4412精英版+7寸屏+SCP封装+2G内存+16G闪存。其他版本可能会有一点点区别,但不影响学习。 一、开机前检查: 电源适配器(5V/2A):插到图上左下角POWER。开发
[单片机]
4412<font color='red'>ARM</font>开发板学习笔记(一)
苹果A6没使用标准ARM架构而是全新设计
    之前有消息称iPhone 5搭载的时全球第一款基于ARM Cortex A15架构的处理器。但现在根据AnandTech报道,其实A6处理器并没有使用A15架构,A6处理器是苹果自家研发的架构,也就是来自苹果的设计。A6处理器的核心并没有基于vanilla A9或者A15架构设计,确切的说A6处理器仍然基于ARM的设计,但是并不是标准的Cortex A8、A9或全新的A15。     换句话说,苹果重新设计的A6处理器的架构,让芯片将iOS的性能推至顶峰。     高通出品的骁龙Snapdragon处理器也是这种做法,抛弃标准的ARM机构,公司设计自家的架构。但是对于苹果来说,A6处理器是公司首款非标准ARM架构的处理器。有
[手机便携]
ARM中的程序状态寄存器CPSR
M 处理器模式 ARM模式可访问的寄存器 THUMB模式可访问的寄存器 0b10000 用户模式 PC,CPSR,R0~R14 PC,CPSR,R0~R7,LR,SP 0b10001 FIQ模式 PC,CPSR,SPSR_fiq,R14_fiq~R8_fiq,R0~R7 PC,CPSR,SPSR_fiq,LR_fiq,SP_fiq,R0~R7 0b10010 IRQ模式 PC,CPSR,SPSR_irq,R14_irq~R13_irq,R0~R12 PC,CPSR,SPSR_irq,LR_irq,SP_irq,R0~R7
[单片机]
爱特梅尔首发基于ARMCortex-M4处理
微控制器及触摸解决方案的领导厂商爱特梅尔公司(Atmel® Corporation)近日宣布向主要客户提供爱特梅尔SAM4S16器件样品,这是基于Cortex™-M4处理器之产品系列的首款器件。爱特梅尔继续致力于提供基于ARM®处理器的微控制器(MCU)产品,并公布了第五代基于Cortex-M4的快闪微控制器。 在2012年,爱特梅尔SAM3和SAM4系列将使爱特梅尔Cortex-M产品组合的数目增加至四倍,ARM-based微控制器将达到200款,包括高达2MB的片上快闪存储器、192KB SRAM和包含高速USB在内的多种外设的器件。爱特梅尔新型ARM Cortex-M4快闪系列中的数款器件还带有浮点运算单元(FPU),从而将
[单片机]
第一课,ARM芯片的时钟体系
注:以下内容学习于韦东山老师arm裸机第一期视频教程 一. 2440时钟简介 1.1 2440是一个SOC(system on chip)系统,不仅有很多CPU,还有很多外设,在2440芯片手册有系统框架图如下: 2440框架图中,不仅有CPU,而且有很多外设,其中外设分为两部分,一部分是AHB总线,一部分是APB总线 1.2 AHB总线 1.2.1 LCD控制器 1.2.2 USB控制器 1.2.3 NAND控制器 1.2.4 内存控制器 1.2.5 摄像头接口 1.2.6 中断控制器 1.2.7 电源管理等等 1.3 APB总线 1.3.1 UART 1.3.2 USB device 1.3.3 I2C
[单片机]
第一课,<font color='red'>ARM</font>芯片的时钟体系
基于ARM-Linux的Modbus串口服务器设计
串口服务器的功能 串口服务器是一种通信协议转换器,它设有两类通信端口:一类是标准的RS232/422/485格式的串行端口,远程的RTU(远程终端设备)监控模块通过串行控制总线接入串口服务器的此类端口;另一类是以太网口,通过网线将串口服务器接入局域网的交换机等设备中。 串口服务器在工作中可自动将RS232/422/485格式的串行数据与基于TCP/IP协议的以太网数据包进行透明转换。一方面,串口服务器收到来自某一串行端口的现场数据,将其转换为TCP/IP格式的数据,通过以太网口进行网络上传;另一方面,串口服务器在局域网中捕获合法的数据协议包,通过解包来解析出有效的控制信息,通过监控机指定的串行端口将控制命令以串行数据的方式
[单片机]
基于<font color='red'>ARM</font>-Linux的Modbus串口服务器设计
采用ARM+Linux 的仪器控制系统设计
0 引 言   嵌入式系统的开发都有其特殊的应用场合与特定功能,而嵌入式Linux操作系统因其开源和广泛的处理器支持、易于移植而备受行业青睐。AT91RM9200是Atmel公司针对系统控制、通信领域推出的基于ARM920T内核的32位RISC微处理器,它具有小体积,低功耗,低成本及高性能等特点,其内部集成了SPI、串口、PIO、以太网、EBI、USB、MCI等多种接口。   在Linux系统中,应用层不可以直接操作硬件,需设计驱动程序向下屏蔽硬件特性,实现硬件与用户间的通信。系统平台为在虚拟机中安装Fedora 8,目标系统采用Linux 2.6.21.7内核,定制文件系统建立NFS根文件系统,使用双网卡方式搭建成交叉开发环
[单片机]
采用<font color='red'>ARM</font>+Linux 的仪器控制系统设计
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved