主题文档

5分钟读懂cpu cache-k8凯发

如果有人问你:啥叫cpu cache?咋回答?让我们先来看看cache与cpu的奇妙纠葛

业界

业界

cache一词源自法语,其原意是“藏匿处,隐秘的地方”。cache被应用于计算机科学之后,专指cpu与主内存之间的高速缓冲存储器。cache的出现是为了缓解cpu的存储需求与主内存的存取性能之间越来越大的差距。现代cpu的cache都是集成在片内的,越靠近cpu流水线的cache由于需要极其快速的存取速度,只能保持越小的容量,并且单位容量的成本越高。因此,为了进一步缓解需求与性能之间的差距,并应对不断增大的主内存,最新的cpu都采用三级cache结构。

业界

1靠近cpu流水线的l1 cache速度最快、容量最小2l2 cache速度与容量都居中3靠近主内存的l3 cache则是容量最大,但速度相对最慢(仍然比主内存快很多)。4此外,为了能使指令与数据都得到最快的响应,l1 cache中的指令部分与数据部分是相互独立的,分别为指令l1-i cache与数据l1-d cache;而l2 cache与l3 cache则是将指令与数据混合存储的。

业界

cpu存储结构示意看到这里你会觉得嗯 cpu cache大约么就是这么回事情嘛but...如果再问你cpu cache的工作原理又是啥呢?

业界

业界

局部性原理一般的计算机程序对存储器的访问行为,存在很大的局部性,主要分为两个方面:时间局部性与空间局部性。→ 时间局部性,即程序会在一个比较短的时间窗口内频繁访问同一个内存地址。→ 空间局部性,即程序会倾向于访问一组数据或者一个数据相邻的数据。cache正是利用了程序访存的这两个局部性特点,将程序最常使用的指令与数据放在离cpu流水线最近的地方,以便在需要时最快地获取这部分指令与数据。

业界

映射关系cache中存储的内容是主内存的一个子集,越是常用的指令与数据,越可能出现在离cpu流水线近的cache中。主内存中的数据按照一定的映射关系,以块(也称为行)为单位存入cache中。这其中的映射关系决定了cache块放置的位置。cache与主内存、cache与cache之间的映射关系,是影响cache性能的重要因素之一。映射关系主要分为三种:全相联映射、直接映射与组相联映射。→ 全相联映射主存中的任一块可以被放置到cache中的任意一个位置。其特点是空间利用率高,冲突概率最低,实现最复杂。→ 直接映射主存中的每一块只能被放置到cache中的唯一的一个位置。其特点是空间利用率低,冲突概率最高,实现最简单。→ 组相联映射主存中的每一块可以被放置到cache中的唯一的一个组中的任何一个位置。组相联映射是直接映射和全相联映射的一种折中。

业界

→ n路组相联如果组内有n个块,则称该缓存位置为n路组相联。相联度越高,cache空间的利用率就越高,块冲突概率就越低,缺失率也就越低。查找算法针对常用的组相联映射方式,cache块的查找是通过查找目录来实现的。首先将物理地址从低位到高位分为三个部分:块偏移、索引以及标志(tag)。块偏移字段从块中选择期望数据,其位数由块大小决定,常用的块大小为64b,对应6bit。索引字段选择组,组的数量由具体设计决定,组数确定了索引字段的位数也就确定了。组选定后,通过对比组中所有路的标志字段与目标物理地址的标志字段是否一致来判断是否命中,若命中即查找到了所需访问的指令或数据。

业界

查找算法对应的物理地址划分查找cache块流程示意图替换策略当调入一个新块,而cache被占满时,应该替换哪一块?对于直接映射,只有一个块别无选择;对于全相联或组相联,则有多个块可以进行选择。主要的替换方法有以下几种:随机、fifo以及lru。随机顾名思义就是随机选择一个块进行替换。fifo即先进先出,将最早进入cache的块替换出去。lru全称为least recently used,即最近最少使用替换法,也就是将最近最少使用的块替换出去。lru是主流的替换算法,为了进一步降低由替换引起的缺失率,在lru基础上又发展出很多更高级的替换算法,如nru、mlp以及rrip等。写策略写操作必须是确认在命中后才可进行。写访问有可能会导致cache和主存内容不一致。两种写策略:→ 直写(write-through): 执行写操作时,不仅写入cache, 而且也写入下一级存储器。→ 回写(write-back): 执行写操作时,只写入cache, 仅当cache中相应的块被替换时,才写回主存。

业界

两种写策略的比较:→ 直写(write-through): 简单易实现,所有层次都具有相同的数据, 便于维护一致性,但是写的次数较多, 对带宽需求比较大。 在进行写操作的过程中cpu必须等待。→ 回写(write-back): 在往主存写时,将多次合为一次。 降低了写主存的次数,降低了带宽,节省功耗, 但需要额外添加一个修改位。

业界

写入分配的比较:→ 写入分配(allocate): 写miss时,先把所写单元所在的块调入cache, 再进行写操作。能够将多次写合为一次,且写与读相似。→ 无写入分配( no-allocate ): 写miss时,直接写入下一级存储器而不调入cache。 节省了cache的空间。块的粒度如果块太大,那么块的数目会变少,写操作和读操作会有许多无用的数据,占据带宽较大,功耗大。相反如果块太小,会导致未完全利用空间局域性,并使用更多的tag,逻辑消耗大。

业界

块大小与命中率的关系好啦 关于cpu cache的碎碎念就到这里相信以你的聪(xia)明(la)才(su)智(du)一定分分钟看完啦要是5分钟没看完....

业界

点击下方"阅读原文"可至专业ic教育平台「e课网」凯发k8官网登录vip官网涨知识

业界

the end
本文已经被浏览: 次,获赞:  次
网站地图