原创 当片上网络遇到缓存一致性

2024-3-4 14:44 723 7 7 分类: EDA/ IP/ 设计与制造

When a Network-on-Chip Meets Cache Coherency

当片上网络遇到缓存一致性

作者:Andy Nightingale

A person in a blue shirt

De.ion automatically generated with low confidence

Andy Nightingale是Arteris 产品管理和营销副总裁,他拥有超过 36 年的高科技行业经验,其中有 23 年在 Arm 公司担任各种工程和产品管理职位。

很多人都听说过缓存一致性这一术语,但并不完全了解在片上系统(SoC)器件情况下,尤其是在使用片上网络(NoC)时,缓存一致性的注意事项。要了解这方面的问题,首先需要了解在存储器层次结构中缓存的作用。

缓存和存储器层次结构

CPU 内部的寄存器数量相对较少,但速度极快。CPU 可以在一个时钟周期内访问这些寄存器。不过,它们的存储容量很小。相比之下,访问主存储器进行数据读写则需要占用很多时钟周期。这往往会导致CPU大部分时间处于空闲状态。

1965 年,英国计算机科学家莫里斯-威尔克斯提出了缓存存储器(cache memory)和存储缓冲区(memory caching)的概念。这涉及在 CPU 近旁设置少量称为缓存的快速存储器。“缓存”(cache)一词源于法语 "cacher",意思是 "隐藏 "或 "隐蔽",其想法是利用缓存将主存储器隐藏起来,不让CPU看到。图 1 是包括简单缓存的存储器层次结构排列视图。

A pyramid of information

De.ion automatically generated

图 1. 存储器层次结构的层级排列视图。(来源:Arteris)

这一过程的运行基于两个关键点。首先,当 CPU 上运行的程序涉及主存储器中的一个位置时,通常会对附近的几个位置执行操作。因此,当CPU请求从主存储器中获取单个数据时,系统会从附近的位置引入数据。这种方法可确保相关数据在需要时随时可用。其次,程序通常会对相同的数据集进行大量操作。因此,将常用数据存储在最靠近 CPU 的缓存中是有益的。这种接近性允许更快地访问和处理数据。

SoC中的缓存

在 SoC 中,缓存是通过高速、高功耗、低容量的 SRAM 在片上实现的。同时,主存储器在片外的印刷电路板(PCB)上实现,通常采用低速、低功耗、高容量 DRAM 的形式。

为了最大限度地减少延迟,设计人员在当今的许多 SoC 中添加了多级缓存。通常包括三个级别:L1、L2 和 L3。L1 缓存最靠近 CPU,容量最小,但访问时间最快,通常在 1-2 个时钟周期内。L2 缓存离 CPU 稍远,提供更高的容量但访问时间较慢,通常在 4-10 个时钟周期之间。L3 缓存离 CPU 更远,提供三者中最大的容量,但访问时间最慢,范围为 10-30 个时钟周期。

多个缓存级别可最大限度地提高性能,同时最大限度地减少对主存储器的片外访问。访问此主存储器可能会消耗数百个时钟周期。通过使用多级别缓存,可以更快地从这些缓存中检索数据,而不是从速度较慢的主存储器中检索数据,从而提高整体系统效率。

当涉及多个 CPU 内核时,所有这些复杂性都会增加。考虑一个常见方案,该集群包含四个 CPU 内核,标记为内核 0 到 内核3,每个内核都有自己的专用 L1 缓存。在某些实现中,每个内核还将具有自己的专用 L2 缓存,而所有四个内核共享一个通用的 L3 缓存。而在另一些其他设计中,内核 0 和内核1 共享一个 L2 缓存,内核 2 和内核 3 共享另一个 L2 缓存,并且所有四个内核共同使用相同的 L3 缓存。这些不同的配置会影响跨不同缓存级别存储和访问数据的方式。

通常,单个集群中的所有处理器内核都是同构的,这意味着它们是同一类型。但是,拥有多个处理器内核集群的情况正变得越来越普遍。在许多情况下,不同集群中的内核是异构的,即是不同类型的。例如,使用 Arm的 big.LITTLE技术,“big”大内核旨在实现最佳性能,但使用频率较低。“LITTLE”小内核针对低性能的电源效率进行了优化,并且大部分时间都在使用。例如,在基于 Arm 的智能手机中,“big”大内核可能会被激活用于 Zoom 通话等任务,这些任务相对较少。相比之下,“LITTLE”小内核可以处理更常见、较低要求的任务,如播放音乐和发送短信。

保持缓存一致性

在系统中,各自具有单独缓存的多个处理元素共享同一主存储器,可能拥有共享数据的多个副本。例如,一个副本可能位于主存储器中,而更多副本位于每个处理器的本地缓存中。保持缓存一致性,要求对一个数据副本所做的任何更改都反映在所有副本中。这可以通过使用新数据更新所有副本或将其他副本标记为无效来实现。

缓存一致性可以在软件控制下保持。但是,软件管理的一致性非常复杂且难以调试。尽管如此,它仍然可以使用缓存清理等技术来实现,其中存储在缓存中的修改数据被标记为脏数据,这意味着它必须被写回主存储器。可以对整个缓存或特定地址执行缓存清理,但在 CPU 周期内成本很高,并且必须在保存数据副本的所有 CPU 上执行。

保持缓存一致性的首选方法是使用专用硬件,通过软件隐蔽地管理缓存。例如,处理器集群中与内核相关联的缓存通常包括保持缓存一致性所需的硬件。

使用或不使用

SoC 由大量称为知识产权(IP)模块的功能块组成。处理器群集就是这样一个 IP 块。连接 IP 块的常用方法是使用 NoC。

在许多 SoC 设计中,处理器集群之外不需要一致性,从而允许非一致性或 IO一致性的 AXI5 或 AXI5-Lite NoC,例如 Arm 的 NI 或 Arteris 的 FlexNoC。但是,对于具有多个处理器集群且缺乏固有缓存一致性的 SoC 设计,或者在集成需要缓存一致性的第三方 IP 或自定制加速器 IP 时,则需要一致性 NoC。示例包括使用 AMBA CHI 协议的 Arm 的 CMN 或使用 AMBA ACE 和/或 CHI 协议的 Arteris 的 Ncore。

A diagram of a computer

De.ion automatically generated

图2. 采用一致性 NoC 的主系统与采用非一致性 NoC 的安全岛相配合的示例。(来源:Arteris)

在整个芯片中普遍应用缓存一致性可能会耗费大量资源,而且对于特定组件来说也没有必要。因此,如图 2 所示,将缓存一致性隔离在芯片的一个子集,如 CPU 集群和特定加速器 IP,可以更有效地利用资源并降低复杂性。一致性 NoC(如 Ncore)在需要严格同步的应用场景中表现出色。同时,非一致性互连(如 FlexNoC)在不需要严格同步的情况下非常理想。

设计人员可以从战略上平衡特定领域对数据一致性的需求,同时在不需要严格一致性的情况下从更精简的通信渠道中获益。在当今复杂的异构 SoC 中,一致性互连和非一致性互连之间的协同作用已成为一种战略优势,可提高系统的整体效率和适应性。

访问 Arteris了解有关 Ncore 缓存一致性互连 IP的更多信息。

作者: ArterisIP, 来源:面包板社区

链接: https://mbb.eet-china.com/blog/uid-me-3893295.html

版权声明:本文为博主原创,未经本人允许,禁止转载!

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
7
关闭 站长推荐上一条 /3 下一条