返回首页  设为首页  加入收藏  今天是:
网站首页电脑主板电脑cpu电脑内存电脑硬盘电脑显卡电脑电源显示器电脑配件电脑维修
相关文章
 ARM嵌入式系统中内存对齐的重…
 结合实例深入理解C++对象的内…
 传英特尔Battlemage显卡将于…
 蓝戟新品官宣 12 月 4 日发布…
 曝英特尔锐炫B580显卡限量盒…
 首款背插30主板Z890曝光简化…
 下一代PC供电危机:不仅仅是…
 MEG Z890系列具有多达26路智…
 速度突破2000MBs!朗科ZX20L…
 百TB NAS一步到位!希捷酷狼…
 速度高达2000MBs!朗科移动S…
 超级石化推荐:我国合成树脂…
 仙桃拖车救援汽车道路救援附…
 娄底附近高速道路救援随叫随…
 2024年9月中国大陆显卡出货量…
 老牌服装专业市场的自救“电…
 买显卡请三思!部分30系矿卡…
 面板价格趋势(2024年11月上…
 多款高科技辅具集中亮相福祉…
 维信诺-电子发烧友网
 长城X7金牌全模组
 安钛克HCG650 Gold(650W)
 为什么“洋垃圾”的电脑在网…
 微星推出四款X870EX870主板:…
 3K价位顶级堆料!技嘉Z890 A…
 华擎Z890太极水冷主板:20个…
 k70红米发布时间包括配置
 柯美首款PictBridge功能网络…
 芝奇发布首款CUDIMM DDR5内存…
 近代显卡历史:从基础到创新…
 EIC丨从GPU到AI看英伟达如何…
 名流风云|曾经扫厕所的孩童…
 猎金部落Excellent 850W电源…
 爱国者星璨EV850W全模组电源…
 超强性能游戏电脑装机指南:…
 保护数据安全:革命性硬盘加…
 全新移动硬盘分区工具助力数…
 10款好用的加密软件推荐为企…
 华硕B650主板性能狂飙 免费畅…
 华硕ThunderboltAG网址 5:技…
 华硕笔记本电脑评测:性能与…
 不要去卖便宜货而是要把货卖…
 厦门跟团3天多少钱?当地旅行…
 不靠师兄也学懂!笔记本台式…
 显示器购买攻略涵盖所有规格…
 1080P 180Hz屏仅559元!Redm…
 游戏显示器迈入双模新纪元京…
 笔记本CPU温度在哪些范围算正…
 CPU硅脂更换指南:维护计算机…
 靠电子游戏卖硬件的规律
专题栏目
网络
您现在的位置: 电脑评测网 >> 电脑内存 >> 正文
高级搜索
ARM嵌入式系统中内存对齐的重要性
作者:佚名 文章来源:本站原创 点击数: 更新时间:2024/12/1 11:44:46 | 【字体:

  作嗳怎样进去图片软件开发,经常在代码中看到各种各样的对齐,很多时候我们都是知其然不知其所以然,知道要做好各种对齐,但是不明白为什么要对齐,不对齐会有哪些后果,这篇文章大概总结了内存对齐的理由。

  目前有一些RISC指令集的CPU不支持非对齐的内存变量访问操作,比如 MIPS/PowerPC/某些DSP等等,如果发生非对齐的内存访问,会产生unaligned exception 异常。

  ARM指令集是从ARMv6(ARM11)开始支持非对齐内存访问的,以前老一点的ARM9的CPU也是不支持非对齐访问的。ARM指令集支持的部分特性迭代如下:

  尽管现代的ARMv7 ARMv8 指令集的Cortex-AXX系列CPU都支持非对齐内存访问,但是考虑到如下图所示现代SOC芯片里面多种异构CPU协调工作的情况,主CPU用于跑Linux的ARM64可以支持非对齐内存访问,但是SOC里面还有其它不知道体系结构和版本的协CPU(可能是MIPS, ARM7,Cortex-R/M系列, 甚至51单片机核),这些协CPU都和主ARM64主CPU共享物理内存的不同地址段,并且有自己的固件程序在内存上运行,所以在划分地址空间的时候还是要注意内存对齐的问题,尤其是考虑到这些协CPU可能不支持非对齐访问,同样在编写协CPU固件程序的时候,也要清晰认识到该CPU是否支持非对齐内存访问。

  同样在ARM的MMU虚拟地址管理中,也有内存地址对齐的要求,下图是ARM的MMU的工作原理和多级页表(Translation Tables)的索引关系图

  尽管现代的ARMv7 ARMv8 指令集的ARM CPU支持非对齐内存访问,但是非对齐内存访问是无法保证操作的原子性。下图分别是一个变量在内存对齐和非对齐的时候的内存布局:

  内存对齐的变量访问,使用单个通用的CPU寄存器暂存,一个内存对齐的变量的读写操作能保证是单次原子操作.

  非对齐的变量的内存访问是非原子操作,他们通常情况下访问一个非对齐的内存中的变量需要2次分别的对内存进行访问,因而不能保证原子性,一旦发生2次分别内存访问,2次分别的访问中间就有可能被异步事件打断,造成变量改变,因而不能保证原子性。

  现代ARM CPU一般都有一个NEON的协处理器,一般用在浮点计算中用来做SIMD并行矢量加速计算。下图是NEON SIMD并行矢量计算的基本原理图:

  通常情况下,为了灵活应用NEON的并行计算特性,在做SIMD并行矢量加速运算时,我们要根据NEON寄存器的Lane的bits数对齐相应的变量。如果是配置成8-bits的计算,就做8-bits对齐,如果是16-bits计算,就做16-bits对齐,以此类推,NEON的并行矢量计算的lane根据spec手册,有各种灵活配置的方法。

  通常而言,尽管现代的ARM CPU已经支持非对齐内存的访问,但是ARM访问非对齐的内存地址还是会造成明显的性能下降。因为访问一个非对齐的内存,需要增加多次load/store内存变量次数,进而增加了程序运行的指令周期

  才有perf工具进行性能分析,能看到非对齐内存访问的性能下降,在perf工具中有一个alignment-faults的事件,可以观察程序访问非对齐内存的事件统计

  除了通常所讲的根据CPU访问内存的地址位数的内存对齐之外,在程序优化的时候,还要考虑到cache存在的情况,根据cache line的长度来对齐你的访问变量。

  下图是一个例子关于未做cache line对齐的情况下,进行内存读写性能抖动的例子,引用自cenalulu.测试代码如下程序的大意,对不同大小的数组进行1亿次读写操作,统计不同数组size时的读写时间。从测试的结果可以看出,当数组大小小于cache line size时,读写时间基本变化不大,当数组大小刚刚超过cache line size的时候,读写时间发生了剧烈的抖动。这是因为超过cache line 大小的数组元素可能没有提前预读到cache line中,在访问完cache line中的数组元素之后,要重新从内存读取数据,刷新cache line,因而产生了性能抖动。通过这个例子告诉我们,充分利用系统cache特性,根据cache line对齐你的数据,保证程序访问的局部数据都在一个cache line中可以提升系统性能。

  没有对齐到同一个cache line中的变量,在多核SMP系统中,cross cache line操作是非原子操作,存在篡改的风险。该例子引用自kongfy)测试代码如下,程序大意是,系统cpu的cache line是64字节,一个68字节的结构体struct data, 其中前面填充60字节的pad[15]数组,最后一个8字节的变量v, 这样结构体大小超过了64字节,最后一个变量v的前后部分可定不在同一个cache line中,整个结构体没法根据cache line对齐。全局变量value.v初始值是0, 程序开多线程,对全局变量value.v进行多次~位取反操作,直觉上最后结果value.v的位结果不是全0就是全1,但是最后value.v的位结果居然是一半1一半0, 这就是由于cross cache line 操作是非原子性的,导致一个线程对value.v前半部分取反的时候,另外的线程对后半部分在另一个cache line同时取反,然后前一个线程再对另一个cache line的value.v后半部分取反,导致和直觉不一致。

  文章出处:【微信号:嵌入式与Linux那些事,微信公众号:嵌入式与Linux那些事】欢迎添加关注!文章转载请注明出处。

  软件的自动化测试,更多的还是依赖代码级别的白盒测试工具;黑盒动态测试还主要是根据不同的装备需求,研发配套的工装

  小白入门博客时间总是不等人,转眼间自己都已经是一名研一的学生了,回想起自己过去本科的学习,讲实话根本是无规律可循,可以说自己大学四年在编程这块都没有用心去

  管理方案研究 /

  分析 /

  OpenHarmony有 支持的分布式数据库吗? 自动同步各节点数据?

  麻烦厂家发一份CS1238/CS1237的驱动给我,STC单片机的。顺便发一个带基准电压的电路给参考一下

电脑内存录入:admin    责任编辑:admin 
  • 上一个电脑内存:

  • 下一个电脑内存: 没有了
  •  
     栏目文章
    普通电脑内存 ARM嵌入式系统中内存对齐的重要性 (12-01)
    普通电脑内存 结合实例深入理解C++对象的内存布局 (12-01)
    普通电脑内存 k70红米发布时间包括配置 (11-30)
    普通电脑内存 柯美首款PictBridge功能网络彩激评测 (11-30)
    普通电脑内存 芝奇发布首款CUDIMM DDR5内存:48GB 9600MHz价… (11-30)
    普通电脑内存 国风水墨设计!七彩虹全新iGame影系列内存图赏 (11-29)
    普通电脑内存 内存有救了!微信或将迎来史诗级“瘦身” (11-29)
    普通电脑内存 海盗船 RGB 版 VENGEANCE DDR5 CUDIMM 内存条… (11-29)
    普通电脑内存 英伟达H20系列暂停接单通知 (11-28)
    普通电脑内存 华硕灵耀14Air推出Ultra5226V新规格价格9 (11-28)
    普通电脑内存 掌握电脑英语发音技巧轻松提升语言能力 (11-28)
    普通电脑内存 超频最新资讯-快科技--科技改变未来 (11-27)
    普通电脑内存 CUDIMM内存即将成为主流阿斯加特正式发布CUDI… (11-27)
    普通电脑内存 本月结束!华为手机内存升级限时88折:仅需34… (11-27)
    普通电脑内存 微信新功能冲上热搜!网友:我的内存有救了…… (11-26)
    普通电脑内存 奥运会负一是什么意思 - 奥运会负一是什么意思… (11-26)
    普通电脑内存 DDR3显存是什么 (11-26)
    普通电脑内存 天启行动需要多少内存 天启行动配置需求介绍 (11-25)
    普通电脑内存 深圳市捷视飞通科技取得互动教学相关专利有效… (11-25)
    普通电脑内存 铠侠-电子发烧友网 (11-25)