0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

内存访问的在不同的访问场景下延时究竟是个什么表现

冬至配饺子 来源:开发内功修炼 作者:张彦飞allen 2022-08-30 16:53 次阅读

《内存随机访问也比顺序慢,带你深入理解内存IO过程》一文中,我们理解了内存IO的内部实现过程,知道了内存的随机IO比顺序IO要慢,并对延迟时间进行了大概的估算。那么我们今天来用代码的方式来实践一下,看看在我们的项目工程中,内存访问的在不同的访问场景下延时究竟是个什么表现。

1、先测顺序IO情况

测试原理就是定义一个指定大小的double(8字节)数组,然后以指定的步长去循环。这里面的变量有两个。核心代码如下:

poYBAGMNz2mAZF06AABxRIyCwls569.png

在这个核心代码的基础上,我们有两个可调节变量:

一是数组大小,数组越小,高速缓存命中率越高,平均延时就会越低。

二是循环步长,步长越小,顺序性越好,同样也会增加缓存命中率,平均延时也低。我们在测试的过程中采取的办法是,固定其中一个变量,然后动态调节另外一个变量来查看效果。

另外说明一下,这个代码测试中考虑的几个额外的开销的处理情况。

1.加法开销:由于加法指令简单,一个CPU周期就可完成,CPU周期比内存周期要快,所以暂且忽略它。
2.耗时统计:这涉及到高开销的系统调用,本实验通过跑1000次取一次耗时的方式来降低影响。

场景一:固定数组大小2K,调节步长

pYYBAGMNz3-Ac42ZAAA2xVT2MPg658.png

数组足够小的时候,L1 cache全部都能装的下。内存IO发生较少,大部分都是高效的缓存IO,所以我这里看到的内存延时只有1ns左右,这其实只是虚拟地址转换+L1访问的延时。

场景二:固定步长为8,数组从32K到64M

poYBAGMNz5iACkyjAAA5DK1zPEY968.png

当数组越来越大,Cache装不下,导致穿透高速缓存,到内存实际IO的次数就会变多,平均耗时就增加

场景三:步长为32,数组从32K到64M

poYBAGMNz62ANXyLAABDMDMN_4o231.png

和场景二相比,步长变大以后,局部性变差,穿透的内存IO进一步增加。虽然数据量一样大,但是平均耗时就会继续有所上涨。不过虽然穿透增加,但由于访问地址仍然相对比较连续,所以即使发生内存IO也绝大部分都是行地址不变的顺序IO情况。所以耗时在9ns左右,和之前估算大致相符!

另外注意一个细节,就是随着数组从64M到32M变化的过程中。耗时有几个明显的下降点,分别是8M,256K和32K。这是因为本机的CPU的L1大小是32K,L2是256K,L3是12M。在数据集32K的时候,L1全能装的下,所有基本都是高速缓存IO。256K的时候、8M的时候,虽然L1命中率下降,但是L2、L3访问速度仍然比真正的内存IO快。但是超过12M以后越多,真正的内存IO就越来越多了。

2、再测随机IO情况

在顺序的实验场景里,数组的下标访问都是比较有规律地递增。在随机IO的测试中,我们要彻底打乱这个规律,提前随机好一个下标数组,实验时不停地访问数组的各个随机位置。

pYYBAGMNz72ASSnXAACFkWasV7E580.png

这实际比上面的实验多了一次内存IO,但由于对random_index_arr的访问时顺序的,而且该数组也比较小。我们假设它全部能命中高速缓存,所以暂且忽略它的影响。

随机实验场景:数组从32K到64M

pYYBAGMNz9KAdfHzAAA2C21U8jQ933.png

这次的数组访问就没有步长的概念了,全部打乱,随机访问。当数据集比较小的时候、L1、L2、L3还能抗一抗。但当增加到16M、64M以后,穿透到内存的IO情况会变多,穿透过去以后极大可能行地址也会变。在64M的数据集中,内存的延时竟然下降到了38.4ns,和我们估算的也基本一致。

3、结论

有了实验数据的佐证,进一步证实了《内存随机访问也比顺序慢,带你深入理解内存IO过程》的结论。内存存在随机访问比顺序访问慢的多的情况,大概是4:1的关系。所以不要觉得内存很快,就用起来太随性了!



审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • cpu
    cpu
    +关注

    关注

    68

    文章

    10898

    浏览量

    212569
  • 内存
    +关注

    关注

    8

    文章

    3045

    浏览量

    74204
  • 高速缓存
    +关注

    关注

    0

    文章

    30

    浏览量

    11079
收藏 人收藏

    评论

    相关推荐

    EE-62:C语言中访问短字内存

    电子发烧友网站提供《EE-62:C语言中访问短字内存.pdf》资料免费下载
    发表于 01-07 14:02 0次下载
    EE-62:<b class='flag-5'>在</b>C语言中<b class='flag-5'>访问</b>短字<b class='flag-5'>内存</b>

    如何使用内存加速存储访问速度

    本篇文章是首尔大学发表FAST 2023上的文章。随着闪存容量的增加,逻辑地址到物理地址的映射表项也相应增加。映射表项通常存放在设备控制器中的SRAM来加速访问。然而由于成本问题SRAM一直无法
    的头像 发表于 12-19 10:54 298次阅读
    如何使用<b class='flag-5'>内存</b>加速存储<b class='flag-5'>访问</b>速度

    嵌入式和人工智能究竟是什么关系?

    嵌入式和人工智能究竟是什么关系? 嵌入式系统是一种特殊的系统,它通常被嵌入到其他设备或机器中,以实现特定功能。嵌入式系统具有非常强的适应性和灵活性,能够根据用户需求进行定制化设计。它广泛应用于各种
    发表于 11-14 16:39

    PCM1861 INT脚究竟是输出还是输入?

    这个芯片activce或是idle. 是否有人解释,INT脚究竟是输出还是输入。我希望是输出,我需要读取到是否有analog audio输入的信息。 或者,输入输出与否还要靠其他什么地方设置? 盼望有人回复解答,不胜感激!
    发表于 10-29 07:29

    超高频读写器究竟是什么,能做什么?一文读懂!

    物联网技术日新月异的今天,超高频读写器作为射频识别(RFID)技术的重要组成部分,正逐渐渗透到我们生活的各个领域。那么,超高频读写器究竟是什么?它又能做些什么呢?本文将带您一探究竟。一、超高频
    的头像 发表于 10-23 14:41 263次阅读
    超高频读写器<b class='flag-5'>究竟是</b>什么,能做什么?一文读懂!

    什么是ACL访问控制列表

    通过之前的文章简单介绍了华为交换机如何配置SSH远程登录,一些工作场景,需要特定的IP地址段能够SSH远程访问和管理网络设备,这样又需要怎么配置呢?下面通过一简单的案例带着大家去了
    的头像 发表于 10-10 14:35 340次阅读
    什么是ACL<b class='flag-5'>访问</b>控制列表

    揭秘贴片功率电感发烫究竟是不是烧坏了

    电子发烧友网站提供《揭秘贴片功率电感发烫究竟是不是烧坏了.docx》资料免费下载
    发表于 09-30 14:44 0次下载

    电感器线径究竟是粗好还是细好

    电子发烧友网站提供《电感器线径究竟是粗好还是细好.docx》资料免费下载
    发表于 09-20 11:25 0次下载

    这个机子内存是不是集成到板子上了,哪里可以插接口访问内存

    我这个机子内存是不是集成到板子上了呀,哪里可以插接口访问内存呀。
    发表于 08-30 09:04

    tas5756m使用GPIO口加内部PLL产生MCLK的方法究竟是怎么样的?

    tas5756m使用GPIO口加内部PLL产生MCLK的方法究竟是怎么样的?
    发表于 08-19 06:06

    请问cH340G的TX引脚电平究竟是3v还是5v?

    用CD34G来实现usb转串口的时候,直接用usb口的5v作为电源电压,它的tx引脚输出的高电平究竟是5v还是3v,我实测是3v,但网上有的人是5v,想进一步得到大家的确认。
    发表于 05-14 08:15

    STM32擦除后数据究竟是0x00还是0xff ?

    STM32擦除后数据究竟是0x00还是0xff ,百度查了许多发现大多数都是0xff的多,都说SD卡(TF)储存介质是Flash 所以擦除后为0xff,但是我遇到了读出来的数据是0x00的情况,为什么呢
    发表于 04-18 07:59

    吸尘器究竟是如何替你“吃灰”的【其利天下技术】

    如今,吸尘器已成为大多数人居家必备的小家电产品,那么说起吸尘器,你对吸尘器有了解多少呢?不知道大家知不知道它的原理是什么?今天我们就来说一说吸尘器究竟是如何替你“吃灰”的。
    的头像 发表于 03-07 21:17 921次阅读
    吸尘器<b class='flag-5'>究竟是</b>如何替你“吃灰”的【其利天下技术】

    CW32L052 DMA直接内存访问

    传输方式常见于需要将外设采集的数据快速传输到内存进行处理的应用。 • 内存内存之间 :例如在两不同的数组之间传输数据,或者不同的
    的头像 发表于 02-28 16:48 970次阅读
    CW32L052 DMA直接<b class='flag-5'>内存</b><b class='flag-5'>访问</b>

    KVM矩阵远程办公场景中的应用:实现灵活的服务器访问与控制

    随着远程办公的兴起,如何确保员工能够安全、高效地访问和操作服务器成为了企业面临的重要问题。KVM矩阵作为一种先进的远程管理解决方案,以其灵活性和高效性远程办公场景中发挥着重要作用。本文将探讨KVM
    的头像 发表于 02-18 14:49 541次阅读