ARM处理器NEON编程及优化技巧——数据加载和存储

发布者:rockstar6最新更新时间:2016-07-13 来源: eefocus关键字:ARM处理器  NEON编程  优化技巧  数据加载  存储 手机看文章 扫描二维码
随时随地手机看文章
ARM的NEON协处理器技术是一个64/128-bit的混合SIMD架构,用于加速包括视频编码解码、音频解码编码、3D图像、语音和图像等多媒体和信号处理应用。本文主要介绍如何使用NEON的汇编程序来写SIMD的代码,包括如何开始NEON的开发,如何高效的利用NEON。首先会关注内存操作,即如何变更指令来灵活有效的加载和存储数据。接下来是由于SIMD指令的应用而导致剩下的若干个单元的处理,最后是一个例子来说明用NEON来进行SIMD优化。

SIMD的例子

首先看一个实例,24-bit的RGB图像,像素在内存里的组织方式是R, G, B, R, G, B...,如果你想做一个简单的图像处理,比如把R和B通道互换,你该如何高效的使用NEON协处理器呢?首先从存储空间线性加载RGB数据到D寄存器,然后交换R和B数据。 但是这种线性加载的数据进行R和B通道的数据交换非常麻烦,需要首先掩码mask,然后移位并合并掩码数据。这种复杂的运算显然并不高效。

图1. 线性加载RGB数据

NEON提供了各种结构的加载和存储指令来处理这种情况,这些指令能把数据从存储区加载的同时还能把这些值分开存储到不同的寄存器中,如下图2所示,你可以使用VLD3加载来把RGB数据分开存储。

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

然后使用VLD3分开加载的数据就能方便的使用指令(VSWP d0, d2)来进行R和B通道的交换了,然后把结果再写入内存,当然也要使用interleave交织模式的存储,即VST3存储指令。

图3. 交换寄存器d0和d2然后存储

结构化加载和存储语法和具体指令

NEON结构化加载会读取内存内容到64-bit的NEON寄存器,使用可选的deinterleave选项,同样加载指令也可以采用这种reinterleave的方式把寄存器的内容写到内存空间。

图4. NEON的结构化加载和存储

下面介绍NEON存储和加载的结构化方式,语法包括如下5个部分:

图5. NEON的结构化加载和存储语法

  • 加载VLD或者存储VST指令助记符:instruction mnemonic
  • 一个表示interleave模式的数字,表示每个结构体元素间的间隔:interleave pattern
  • 表示每次访问单元的位宽比特数,即结构体内元素类型:element type
  • 读写的64-bit的NEON寄存器集合,最多可以列出4个寄存器,取决于interleave模式:NEON registers
  • 表示内存访问地址的ARM寄存器,该地址可以在每次访问时更新: ARMaddress register

交织模式:Interleave Pattern

加载和存储指令可以用从1到4个相同大小的元素的交织结构体,这些元素可以是NEON指令通常支持的8,16或者32比特。

  • VLD1是最简单的形式,从内存加载1~4个寄存器的数据,没有deinterleave,即线性加载;
  • VLD2加载2或者4个寄存器的数据,解交织奇偶元素到各自的寄存器,这样很容易的把交织的立体声音频数据分解为左右声道的数据;
  • VLD3加载3个寄存器的数据,很方便的把RGB的数据分为R、G、B通道;
  • VLD4加载4个寄存器的数据,解交织,用于分解ARGB图像数据;

存储和加载类似,只是把寄存器的数据interleave然后写到内存。

元素类型 Element Types

加载和存储interleave的数据的基本元素可以为8,16或者32比特的数据。比如NEON指令VLD2.16将加载4个16-bit元素到第一个寄存器,然后4个16-bit元素到第二个寄存器,把临近的奇偶对分开保存到每个寄存器。

图6. 加载并解交织16-bit的数据

把元素大小变成32-bits还是加载相同大小的数据,但是只有2个元素来构成一个向量,同样分成奇偶元素部分。

图6. 加载并解交织32-bit的数据

元素大小还会影响大小端的处理。如果你指定了正确的加载和存储指令的元素大小,从存储空间读取和存储的字节都会按照正确的次序排列,因而相同的代码会在大端和小端系统里适用。最后元素大小还会影响指针的数据对齐,把数据对齐到元素大小的边界能带来更好的性能,当然这也是一般的操作系统OS要求的。如,加载32位元素数据,通常要把第一个元素的地址对齐到32位边界。

单个或者多个元素 Single or Multiple Elements

除了加载多个元素,结构读取还能从内存用deinterleave的模式读取一个元素到NEON寄存器的多个通道或者一个通道而保存其他通道不变。

图7. 加载并解交织到所有的通道

加载到单一通道对于从分散的内存空间的数据读取来构建一个向量非常有用。存储数据到内存也是一样,也可以采用通道的模式进行存储。

图7. 加载并解交织到单一的通道

寻址模式Addressing

NEON的加载和存储指令支持3种格式的寻址模式:

  • 寄存器 [ {,:}]:数据将会从指定寄存器的地址加载或者存储;
  • 带自动加减地址更新的寄存器[{,:}]!:在数据从指定寄存器的地址加载或者存储后会更新地址,更新的地址大小等于读取或者存储的数据元素大小;
  • 带后索引的寄存器[{,:}],:存储空间访问后,会根据制定的寄存器Rm来更新地址,当需要读取或者存储一组具有固定间隔的数据时非常有用。

其他的加载和存储

NEON还支持以下的数据加载和存储:

  • VLDR和VSTR来加载和存储64-bit数值到一个单一的寄存器;
  • VLDM和VSTM来从堆栈加载或者存储多个64-bit数值;

更多的关于支持的加载和存储运算可以参考ARM的参考手册 ARM Architecture Reference Manual. 详细的指令周期信息可以参考每个单独的指令Technical Reference Manual for each core.

关键字:ARM处理器  NEON编程  优化技巧  数据加载  存储 引用地址:ARM处理器NEON编程及优化技巧——数据加载和存储

上一篇:AT91系列ARM 硬件设计笔记
下一篇:ARM高效C编程和优化--编译器,内存和Cache优化以及功耗管理

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

LabVIEW数据记录和存储
对自动测试系统而言,数据存储是必不可少的功能之一。根据不同的应用和需求,程序员可以为终端用户设计不同的数据存储方式,如数据库、文本文件、二进制文件等。这些数据存储方式都有自己的优缺点,因此无法笼统地说哪种好或不好。从通用性的角度考虑,有如下的指标供参考。 存取速度。数据写入文件或从文件中读出有需要耗费一定的时间,不同的存储格式也意味着数据存取速度的差别。 可检索和维护。数据文件写入后并不是一成不变的,有效的数据组织形式能够快速地修改文件中的某部分数据,而不是将文件全部读出。如ini文件使用section和key进行有效地检索,因此可以根据section和key直接指定删除或修改文件中的部分数据。 兼容性。很多应用程序并不是独
[测试测量]
手机存储必须要了解的UFS基础知识
在手机中有三大件组成:CPU、内存DDR、存储设备(EMMC/UFS等),内存用以临时存储程序运行时所需的数据(掉电数据丢失),而存储设备用以长久保存数据(掉电数据不丢失)。 在手机上,从SD卡到EMMC、再到UFS卡,存储卡的速度是越来越快,现在一般手机的配置是EMMC,而旗舰手机的配置是UFS,很明显UFS将会是未来一段时间的手机存储的主流,快是唯一的原因。 所谓的UFS即Universal Flash storage,通用闪存存储,这一概念通常代表2个意思: (1)手机存储接口协议,类似于SATA,PCIE/NVME等概念; (2)使用该协议的存储设备; UFS相比较EMMC的速度很快,其最重要的就是它的信号是差分传
[嵌入式]
手机<font color='red'>存储</font>必须要了解的UFS基础知识
存储器大厂3D NAND良率升 NAND Flash恐过剩
  受到部份零组件缺货影响,ODM/OEM厂2017年第四季PC出货不如预期,导致固态硬碟(SSD)需求急降,价格也一路走跌,2018年上半年 NAND  Flash市场供过于求已难避免。市调机构集邦预期,三星、东芝等 存储器 大厂已拟定3D  NAND 扩产计画,新产能将在2019年后开出,届时 NAND  Flash市场将供过于求。下面就随网络通信小编一起来了解一下相关内容吧。   SSD价格在2017年11月开始走跌,原因在于市场需求明显转淡,2.5吋SATA 3介面120GB TLC SSD价格由40美元跌到年初的32美元,240GB TLC SSD价格则由70美元跌至60美元。但由市场供需来看,上半年一向是传统淡季,但
[网络通信]
STM32 系统架构及存储器映射
一、STM32系统架构 STM32系统架构如下图所示: 主系统有以下部分构成: DCode总线 该总线将M3内核的DCode总线与闪存存储器数据接口相连 ICode总线 该总线将M3内核的ICode总线与闪存存储器指令接口相连,指令取指在该总线上完成 系统总线S-bus 此总线连接Cortex™-M3内核的系统总线(外设总线)到总线矩阵,总线矩阵协调着内核和DMA间的访问。 DMA总线 DMA1和DMA2 此总线将DMA的AHB主控接口与总线矩阵相联,总线矩阵协调着CPU的DCode和DMA到SRAM、闪存和外设的访问。 总线矩阵 此总线矩阵协调内核系统总线和DMA主控总线之间的访问仲裁。此仲裁利用轮换算法。此总线矩阵
[单片机]
印度政府寄希望于芯片政策,欲吸引50亿美元外商投资
印度政府近日表示,期望新出台的芯片政策在未来3年能吸引超过50亿美元的制造业投资。作为对上月宣布的政策的确认,印度政府指出,他们目前将与英特尔及其它芯片制造商就在印度建立生产设施重启谈判。较早时候,在印度半导体制造政策迟迟未能出台的漫长延迟期间,英特尔已经选择在越南建立了生产厂。 印度联邦通讯信息技术部长Dayanidhi Maran表示,因为这一政策的宣布,多达3家芯片制造工厂有可能以每家投资30亿美元在此落户。据悉,该部目前正在组建一个评估委员会,将对生产提案进行审核,并把它的建议提交给印度政府。 印度的芯片政策提供的激励措施在于,对头10年生产实行税收减免,以及占总资本开支达20%免息贷款。为了获得这一激励措施,对芯片制
[焦点新闻]
基于DSP的数字存储示波卡的设计方案
  1.引言   数字存储示波器有别于一般的模拟示波器,它是将采集到的模拟电压信号转换为数字信号,由内部的微处理器进行分析、处理、存储、显示或打印等操作。这类示波器通常具有程控和遥控能力,通过GPIO接口还可将数据传输到计算机等外部设备进行分析处理。随着大规模集成电路的不断发展,功能强大的DSP数字信号处理器的实时性越来越强。DSP凭借其强大的数字信号处理能力,为数字示波器的数据采集系统的实现提供了一个可靠而又实用的平台,并且提高了数字存储示波器的采样速率、存储深度、波形捕获能力等指标。   本文描述的数字存储示波卡是一种基于DSP的双通道数字存储示波器。该示波器采用的是TI公司的TMS320F2812芯片,它具有高速的数字信号处
[测试测量]
基于DSP的数字<font color='red'>存储</font>示波卡的设计方案
合肥长鑫19nm DRAM存储器或年内下线
    中安在线、中安新闻客户端讯 据安徽商报消息 从传统的制造业,到战略性新兴产业为主的高端制造业,通过引进高科技企业和项目落地,合肥经开区正在打造智能家电、电子信息、汽车及新能源汽车、现代服务业四个千亿产业。所对应的,是不同类型企业产值的迅速提升。   “隐形冠军”藏在冰箱门边   位于合肥经开区的芯瑞达科技股份有限公司是一家专业从事液晶显示背光源、半导体封装等相关产品研发、生产、销售的高新技术企业。听到“背光源”,大部分人可能不太了解。芯瑞达副总经理王光照解释,一台普通的家用电视或者显示器,供电之后液晶显示屏可发光,继而产生清晰的图像,其实电视本身是不发光的,是液晶屏背后的背光源在起作用,这个“点亮”屏幕的背光源就是芯瑞达所
[半导体设计/制造]
基于DSP+FPGA的便携数字存储示波表设计
摘要:本文提出了一种基于DSP+FPGA的嵌入式便携数字存储示波表的设计方案,充分利用微控制器技术和ASIC技术实现了嵌入式实时处理,很好地达到了体积小、重量轻、功能强、可靠性高的要求。 关键字:便携式数字存储示波表,数字信号处理器,现场可编程门阵列,嵌入式设计 1. 引言 随着大规模集成电路技术、信号分析与处理技术及嵌入式微处理器软硬件技术的迅速发展,现代电子测量技术与仪器领域也在不断探讨新的仪器结构和新的测试理论及方法。集数字存储示波器、数字万用表、频率计三者功能于一体的便携式数字存储示波表正代表了当代电子测量仪器发展的一种新趋势。便携式数字存储示波表具有体积小、重量轻、成本低、不需交流供电、可靠性高、使用简便等一系列特
[缓冲存储]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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