目录
一、Article:文献出处(方便再次搜索)
(1)作者
(2)文献题目
(3)文献时间
(4)引用
二、Data:文献数据(总结归纳,方便理解)
(1)背景介绍
(2)目的
(3)贡献
(4)主要实现手段
4.1 前置知识
AMBA CHI简介
PCIE和CXL
缓存一致性协议(Cache Coherency Protocols)
内存一致性模型(Memory Consistency Models)
4.2 复合内存一致性模型 compound consistency model
4.3 如何实现复合内存一致性模型
(5)实验结果
5.1 有效性验证
5.2 协议性能
(6)问题记录
四、Why:为什么看这篇文献 (方便再次搜索)
五、Summary:文献方向归纳 (方便分类管理)
一、Article:文献出处(方便再次搜索)
(1)作者
- Nicolai Oswald(NVIDIA)
- Vijay Nagarajan(犹他大学)
- Daniel J. Sorin(杜克大学)
- Vasilis Gavrielatos(华为)
- Theo X. Olausson(麻省理工)
- Reece Carr(爱丁堡)
(2)文献题目
- HeteroGen: Automatic Synthesis ofHeterogeneous Cache Coherence Protocols
(3)文献时间
- July/August 2023, IEEE Micro
(4)引用
- Oswald, N., Nagarajan, V., Sorin, D.J., Gavrielatos, V., Olausson, T.X., & Carr, R. (2022). HeteroGen: Automatic Synthesis of Heterogeneous Cache Coherence Protocols. 2022 IEEE International Symposium on High-Performance Computer Architecture (HPCA), 756-771.
二、Data:文献数据(总结归纳,方便理解)
(1)背景介绍
作者的工作受到了两个现代处理器设计趋势的启发:处理器核心的异构性和缓存一致性共享内存。
- 随着异构计算技术的不断进步,CPU和GPU等设备相集成的异构融合处理器在近些年得到了充分的发展。除此之外,在苹果、高通和三星等芯片中也可以看到多样化的核心,包括数字信号处理器、神经处理器和摄像头处理器等。
- 另一个激发设计的趋势是对缓存一致性共享内存(cache-coherent shared memory)的持续依赖。在早期,CPU核心与GPU核心不共享内存。为了结合两者的优势,将CPU和GPU集成在一个芯片的异构融合处理器,这种共享内存的设计可以避免CPU和GPU间通过PCIe进行数据传输,还可以增强数据交互。因此,缓存一致性共享内存目前已经普遍存在,并且在诸如AMBA CHI 和 CXL等标准化设计框架中得到了规范化。
(2)目的
在设计具有缓存一致性共享内存的异构处理器时,架构师面临两个挑战:
- 第一个挑战是复杂性。设计一个同构处理器的一致性协议已经具有挑战性,而引入异构性只会增加困难。这是因为CPU、GPU或加速器内的通信模式非常不同,通常需要为每种情况定制专门的一致性协议。将这些非常不同的协议组合成一个统一的异构整体是具有挑战性的。
- 第二个挑战是对异构处理器的内存一致性模型的推理。考虑一个由多个不同核心集群组成的处理器,每个集群都有自己的集群级一致性协议和一致性模型。现在假设我们已经克服了组合集群级协议的第一个挑战,得到了一个单一协议。那么这个异构处理器提供什么样的一致性模型?如何确保组合的协议符合这个模型?
(3)贡献
为了解决这两个挑战——设计复杂性和一致性模型,作者开发了HeteroGen,一个可以自动生成符合精确一致性模型的异构协议的工具。如图1所示,HeteroGen的输入是每个集群一致性协议的简单原子规范,每个协议都满足自己的集群级一致性模型。输出是一个符合精确定义的一致性模型的并发异构协议,这个模型被称为复合一致性模型。
(4)主要实现手段
4.1 前置知识
AMBA CHI简介
- AMBA 5 Coherent Hub Interface (CHI) architecture,CHI体系结构是一个可扩展的、一致的集线器接口,可用于在多个组件上进行片上互连。CHI体系结构可以灵活地在组件连接之间使用(不同的)拓扑,由性能、功率和面积等系统需求驱动。
- CHI是Arm提供的高级微控制器总线架构(AMBA)的一部分。AMBA是一种免费可用、全球采用的开放标准,用于SoC中功能块的连接和管理。它有助于一次性正确开发具有大量控制器和外设的多处理器设计。
- CHI适用于需要一致性的各种应用,包括移动、网络、汽车和数据中心。AMBA CHI旨在维护组件数量和流量不断增长的系统中的性能。
PCIE和CXL
- PCIe是用于连接计算机内部组件的一种标准接口技术。PCIe设备可以发起一个DMA来访问内存,只要知道目标物理地址即可。虽然PCIe已经有了很多改进,但其难以满足现代计算机处理器和加速器之间的高带宽、低延迟通信需求。于是,CXL技术应运而生。
- CXL(Compute Express Link)是一种高速串行协议,旨在提供更高的数据吞吐量和更低的延迟,它允许在计算机系统内部的不同组件之间进行快速、可靠的数据传输。CXL的目标:解决CPU和设备、设备和设备之间的内存鸿沟。CXL还可以实现内存扩展和内存共享,并且可与计算加速器(如GPU、FPGA)等外设通信,提供更快、更灵活的数据交换和处理方式。
- CXL技术的应用场景非常广泛,其中包括数据中心、人工智能和处理器互联等领域。在数据中心领域,CXL技术可以将不同的计算和存储资源进行互联,提高系统性能和效率。在人工智能领域,CXL技术可以使GPU和FPGA等加速器更好地与主处理器进行协作,提高AI模型训练和推理的速度。在处理器互联方面,CXL技术可以实现不同厂商的处理器之间的互联,提高系统的整体性能和灵活性。
缓存一致性协议(Cache Coherency Protocols)
缓存一致性,emmm,是一个很大范围的问题,简单来说,实现 Cache 一致性协议的关键是跟踪共享数据块的状态。目前有两类协议,它们采用了不同的共享数据状态跟踪技术:
- 目录(directory)协议——物理存储器中共享数据块的状态及相关信息均被保存在一个称为目录的地方。它记录着可以进入 Cache 的每个数据块的访问状态、该块在各个处理器的共享状态以及是否修改过等信息。监听协议的实现又分为两种:写作废和写更新。
- 监听(snooping)协议——每个 Cache 除了包含物理存储器中块的数据拷贝之外,也保存着各个块的共享状态信息。Cache 通常连在共享存储器的总线上,各个 Cache控制器通过监听总线来判断它们是否有总线上请求的数据块。
缓存一致性需要维护多处理机的一致性(coherency)和连贯性(consistency)
- 一致性: 一个数据项的任何读均可得到该数据最近被写的值
- 连贯性: 一个处理器何时读到另一处理器最近更新的内容
内存一致性模型(Memory Consistency Models)
- 内存一致性模型规定了处理器load和store指令的顺序,从而确定load指令应该返回的值。其中,顺序一致性(Sequential consistency,SC)要求在每个线程中,所有load和store指令都应该按照程序顺序来进行全局排序。然而,现代处理器不支持顺序一致性。Intel和AMD处理器支持x86的total store order(TSO)一致性模型,而ARM和RISC-V处理器支持release consistency(RC)的变种。
- 存储指令如何将其值传播给其他处理器在内存模型中至关重要。在MCA(Multicopy atomic)内存模型中,存储值以原子方式传播:一旦该值对其他处理器可见,任何未来的load指令(在逻辑时间上)都不能访问之前的值。本文的重点是MCA内存模型,这种模型得到商用架构(如x86、ARM和RISC-V)的支持。
multi-copy atomicity(MCA):一个存储器写要么不被其他硬件线程看到,要是有一个看到了,那么就表示其他硬件线程都看到了。
理解来看,cache一致性关注的是多个CPU看到一个地址的数据是否一致。而内存一致性关注的是多个CPU看到多个地址数据读写的次序。一个关注的是一个地址,一个关注的是多个地址的顺序。
4.2 复合内存一致性模型 compound consistency model
考虑一个异构计算机系统,其中有n个集群(C1到Cn),每个集群都有自己的一致性协议,该协议强制一个集群内的操作满足一致性模型(Mi)。当将这些集群组合成一个异构处理器时,复合一致性模型保证来自每个集群的操作仍然遵循其相应的集群内一致性模型。
假设集群C1支持顺序一致性(SC),而集群C2支持总存储顺序(TSO,放宽W->R)。复合一致性要求属于C1的线程的操作遵循SC,而属于C2的线程的操作遵循TSO。考虑Dekker的litmus测试,如图2(a)所示load指令Ld1和Ld2都有可能读取零,因为TSO集群不强制执行store到load(St2 -> Ld2)的顺序,而SC集群强制执行St1 -> Ld1的顺序。
然而,如图2(b)所示,一旦在St2和Ld2之间插入一条FENCE指令,两个load指令就不能同时读取零了。需要注意的是,不需要在T1的St1和Ld1之间插入FENCE指令,因为SC集群已经保证了这个顺序。
作者定义了legal excution即读操作能够读取到最新的写操作结果,它确保了并发程序在共享内存计算机上的执行是按照一致性规则进行的。作者通过符号定义了每个线程的程序操作顺序,假设多个线程属于一个集群,每个集群的程序操作顺序和线程相同,集群遵循其MCA模型。那么,作者将复合一致性模型定义为保持之前定义的程序操作顺序。换句话说,如果执行的全局内存顺序与属于每个集群的线程的保持的程序顺序一致,那么该excution被认为符合复合内存模型。
此时,Ld2会读到St1写入的值,即1。Ld1->St2和两个不同的集群相关,而作者提到复合内存模型treat集群内和集群间的通信关系identically,因此Ld1->St2这条边仍然满足全局内存顺序(global memory order)。
4.3 如何实现复合内存一致性模型
现在我们回到合并两个不同的一致性协议的原始问题,本质来说是合并两个不同的目录控制器,但因为不同的cluster的目录控制器与缓存一起实现一个(不同的)一致性协议。一致性协议允许以读或写权限获取缓存行。
当缓存行获得读权限时,它实际上是在本地生成全局内存位置的副本。当缓存行获得写权限时,它实际上是获取全局内存位置的所有权。因此,对于每个内存位置,两个集群中可能有多个位置的副本。在合并目录时,我们必须确保所有内存副本的行为就像只有一个副本一样。我们如何确保这个“复合一致性不变量”?
HeteroGen通过以下方式确保不变量:每当在其中一个集群(比如cluster1)中使写操作在全局范围内可见时,HeteroGen也会使该写操作在cluster2中全局可见。为了在两个集群之间传播写操作,HeteroGen必须自动合成桥接逻辑。具体而言,当在cluster1中使写操作在全局范围内可见时,HeteroGen必须自动识别并触发directory2中的确切请求,以使该写操作在cluster2中全局可见。HeteroGen通过两个机制实现这一点:一致性模型转换和代理缓存。
一致性模型转换:First, HeteroGen identies the access sequence in cluster2’s consistency model for an SC-equivalent store using ArMOR.7 For example, the equivalent of an SC store in RC would be a release. Why an SC-equivalent store? Because that is guaranteed to trigger a write request that propagates globally before the write’s completion.(鼠鼠确实没看懂,这个对HeteroGen有啥贡献,可能是通过将两者都转化为SC模型来同步两个cluster的写操作,指的是衔接的时候用SC模型来同步)
代理缓存:HeteroGen引入了一个代理缓存来向目录发出该请求。在逻辑上,代理缓存是cluster2缓存控制器的克隆,HeteroGen利用它来透明地发出该请求。(在逻辑上,每个集群有一个代理缓存。)实际上,代理缓存是HeteroGen生成的合并目录的一部分,一个集群(比如cluster1)的“代理缓存”表示从cluster2到cluster1的协议流的中间状态。
如图4所示,当在cluster1中使写操作在全局范围内可见时(即,当directory1接收到写权限请求或写回请求时),HeteroGen通过将其转换为适当的请求(借助ArMOR的帮助)并通过其代理缓存在cluster2中发出该请求来传播该写操作。一旦请求完成,代理缓存会驱逐该行,并在cluster2中将该 位置标记为无效。然后,directory1继续完成cluster1内的原始写请求。从cluster2到该位置的future load将会联系directory2,并发现该块在cluster2中无效。此时,HeteroGen会让cluster1的代理缓存接管并触发一个SC等效的从directory1读取操作。一旦值返回,代理缓存会驱逐该行并释放对directory2的控制权,directory2会完成原始的读取请求。
此外,HeteroGen并不能融合任意两种协议,比如基于作废和基于更新的协议不能进行合并,并且HeteroGen要工作起来要指明要合并的协议。
(5)实验结果
5.1 有效性验证
对比试验涉及的模型如表1所示:
在HeteroGen的研究中,作者使用了litmus测试来验证生成的协议。Litmus测试是一种经过时间验证的技术,用于检测系统是否能够违反所期望的一致性模型的运行。已经存在一套针对验证同构协议是否满足非复合内存一致性模型的litmus测试套件。
为了将litmus测试扩展到异构协议,作者生成了能够揭示系统是否违反复合一致性模型的异构litmus测试。他们的过程自动转换了现有(同构)内存一致性模型的litmus测试。在一个具有两个协议集群的系统中,他们选择较弱的一致性模型的litmus测试,并使用一致性模型转换来删除对更强一致性模型不需要的任何同步操作(例如栅栏)。这种方法可以扩展到任意数量的集群。
使用herd7工具,作者生成了111个litmus测试,并针对每个测试,探索了线程到核心的所有可能映射。他们使用Murphi模型检查器来执行每个litmus测试的验证。对于每个litmus测试,Murphi会穷举地搜索可能执行的可达状态空间,并确定系统是否能够违反一致性模型。所有由HeteroGen生成的协议都通过了验证,没有一个允许违反复合一致性模型的行为。
最后,作者还使用Murphi验证了每个协议(包括组成协议和生成的协议)是否没有死锁。
5.2 协议性能
作者进行了实验来研究生成的协议是否会比手动开发的协议性能更差。HCC作为基准协议HCC(类似于Spandex的公开可用协议),手动组合DeNovo协议和MESI协议得到异构协议。将这个基准协议与由HeteroGen生成的RCC-O/MESI协议进行比较。
作者使用gem5对这些协议进行仿真,使用与HCC相同的仿真参数,模拟一个具有64核的系统,其中包括60个tiny cores和4个big cores。大核心使用MESI协议,而微型核心使用DeNovo协议。使用与HCC中相同的13个应用程序,这些应用程序具有细粒度的同步。实验结果显示,HeteroGen的性能与手动生成的HCC性能相当。
(6)问题记录
其实符号化的一堆我都没看明白,定义某个线程是合法时的符号化那一part。
具体来说,本文的核心是组合多个协议,并且组合后的协议仍然满足某个内存一致性模型。而保证多个协议之间进行通信的是2个方法,一个是一致性模型转换(这里没看明白),另一个是代理缓存。文中说到代理缓存其实是某个集群中缓存控制器的一份备份(也指协议流的中间状态),为什么需要这个备份,用来做啥没太明白。
在当前的计算机体系结构中,异构性变得越来越普遍。移动SoC和服务器领域的处理器多样性增加,包括不同类型的处理器,如CPU、GPU、FPGA等。为了使这些异构处理器能够协同工作,工业界正在制定缓存一致性框架,以确保不同处理器之间的数据一致性,并提供共享内存接口,使得多个处理器可以共享数据。
文章有些过于精炼了,下次看HPCA上的详细版本,这篇Micro上的就讲了一个大概。
四、Why:为什么看这篇文献 (方便再次搜索)
了解课题背景:
- 了解异构多核cache一致性协议的实现
- 了解顶会上关于异构多核的一些看法
五、Summary:文献方向归纳 (方便分类管理)
heterogeneous cache coherence protocol
- multiprocessor
- cache consistency protocol
- memory model
参考链接:
面向异构融合处理器的性能分析、优化及应用综述 (jos.org.cn)
CPU学习笔记:CHI协议-1.Introduction - 知乎 (zhihu.com)
什么是CXL(Compute Express Link)技术?一文读懂CXL - 知乎 (zhihu.com)
Document
CPU学习笔记:内存一致性与缓存一致性的区别与联系 - 知乎 (zhihu.com)