时间:2021年10月30日
作者:一只想要上天的猪
原书:[On-Chip-Network](…\on-chip networks & booksim\OnChip Networks Second Edition.pdf) [第一版](…\on-chip networks & booksim\On-Chip Networks (Synthesis Lectures on Computer Architecture) by Li-Shiuan Peh, Natalie Enright Jerger (z-lib.org).pdf)
第二章:与系统体系的接口
体系架构的变化:
单处理器核心计算机芯片逐渐转为多核芯片。对于一个计算机系统而言:**多核(mutli-core)与众核(many-core)**结构已经是计算机系统的主要构建块,这一个重要的变化。
***性能上的增益将主要依靠***:
- 消除处理机与存储器件之间的通信瓶颈
- 执行单元(core)之间的高效通信越来越成为关键因素
本章讨论了几个主要的计算机系统类型,其中片上网络都发挥了关键作用(form a critical backbone)
- shared-memory chip multiprocessors(CMP)【高端服务器、嵌入式产品】
- message passing system
- multiprocessor System on Chip(Mp-socs)【移动设备】
必须要说一句,章节前开始说要讨论三个
但是只说了第一个,后面两个要不没提到,要不就带过
这本书还是不行啊😲
多处理器芯片上的共享主存网络(CMP)
并行编程很难,但是越来越重要。
维持一个全局共享地址空间能够缓解并行程序编程人员的工作负担(这个是相较于PGAS而言的,但是并没有详细解释)。
分割全局地址空间(PGAS)在现代对称多处理机(SMP)中很常见,高位地址用于选择内存地址关联的socket(这个socket可能就是一个物理上与其他存储器分离的存储器)
这里还提到了,SMP和CMP的异同
- 同:二者都是共享主存
- 异:CMP不像SMP的UMA性质,而显示出了NUMA(非均匀存储器访问)
关于PGAS, 可以查看链接:PGAS.pdf
PGAS是一种并行编程模型,它假定一个全局地址空间逻辑上被分割,分割出来的每一份都作为某个进程、线程或者是处理元素(指的就是一个处理核心)局部所有。这种情况可以充分利用局部性原理(locality of reference)
PGAS还有一个变种:异步PGAS(APGAS)
共享存储模型下,通信隐含地发生在数据存取以及取指令过程中
-
逻辑上讲,所有的处理器都存取同一个主存,每个都能看到最新的数据
-
但是实际上,存储层次结构要使用cache改善性能
使用cache要考虑一个很重要的事情,cache一致性,在CMP中(通常每个core都至少有一个私有的L1Cache)cache尤其多。在这里就出现了cache一致性协议来保证所有cache之间数据的一致性,以及要求它是最新的。
这里有一句很有意思的话:
With the shared-memory model, communication occurs implicitly through the loading and storing of data and the accessing of instructions. As a result, the shared-memory model is an intuitive way to realize this sharing.
很奇怪啊,what is “this sharing”??
要不就是这句话不完整;要不就是完整的,share-memory model既做了条件,又做了结果,这句话有什么意思呢;再或者this sharing其实代指前文提到的某个玩意,但是找不到呀
然后这里的communication到底指的是什么?node与node之间,node与memory之间的通信
**Cache一致性协议 ** [主存与cache](…\A Primer on Memory Consistency and Cache Coherence.pdf)
- 单写多读
- 保证每次只有一个处理器写cache行
- 多个处理器可以同时读一个cache行
是cache一致性协议决定了shared memory CMP中哪些信息交流是必要的
shared-memory CMP中的两个关键特征就是:
- cache一致性协议
- cache层次结构
一致性协议对网络性能的影响
memory consistency 和 cache coherence是不一样的,cache coherence是要求多个cache中保存的主存副本是最新的,而memory consistency是定义的存储器存取的规则以及如何应用
如果一个结点想要往某个cache行中写,那么必须确保其他节点没有缓存这个地址
可是这句话真的对吗?凭啥,那不是耽误事儿吗,可能是想说,其他node必须要有权限给它。反正就是讨论嘛,这个里面关于cache一致性的描述不一定正确
需要通信的数据有
- 数据请求
- 数据响应
- 一致性权限/请求、响应
一致性权限要在一个node读/写cache块之前获取
多处理器系统的一致性协议有以下两种:
- 广播协议
- 目录协议
对于广播协议,一致性请求需要发送到芯片上的所有结点,因此产生了**高带宽要求;**数据响应是点对点传输的,不需要排序
广播系统依赖两个物理网络:
- 需要排序的内联网络,高带宽,用于一致性请求、响应
- 不需要排序的内联网络,用于数据传送
可以选用多个虚拟链路保证一致性流量(即一致性请求、响应等)传输过程中的顺序,请求和响应可以使用不同的虚拟链路。
目录协议,不需要依靠任何隐式网络排序,并且能够映射到任意拓扑结构
依靠点对点传输而不是广播,这种情况下的扩展性显然是更好的,可以添加更多的结点。对带宽的要求没有广播协议高
目录包含了信息:哪些core(node)拥有某个cache block,以及一致性状态信息(like MESI protocol的4个状态)
可以想象一下这个目录是一个什么样的结构:
- 是不是要包含一个cache block的信息,能够唯一索引的
- 还得缓存了这个块的结点信息,内联系统或许将这些结点也编址了
目录保存在主存中,所以也可以使用cache对它的访问进行加速。
对目录的cache同样的可以分散到各个node中去,也可以共享的,可以是任意数量的,当要查某个块的目录信息时,需要根据地址做正确的映射。
home node:每个地址与一个home node相互关联,这个home node用于处理所有对该地址的一致性请求,等一下,home node实际上还是一个core所在的tile,home node还是一个node啊
这个地方对于home node的说明不清晰,可以参考另一本书
总结一下,两种协议最大的区别可能只是通信量方面了,至少在这本书里是这样的。
一致性协议对OCN提出的要求
其实前面已经讲了一部分了
缓存一致性协议需要几种信息:
- 单播(点对点)
- 多播(one-to-many,比如目录协议中cache行的不合法信息传播到所有的共享者)
- 广播(one-to-all)
目录一致性协议大部分情况下是单播,带宽要求低,不能避免多播
广播协议存在大量的广播,需要高带宽,数据响应是单播的
对于信息大小尺寸的要求:
- 一种是一致性请求及响应(不带数据的响应)
- 包括主存地址、一致性命令等
- 信息量小
- 一种是数据信息,数据响应,完整的cache block以及地址(一致性协议主要是用于保证所有的cache数据都是up-to-date的)这种情况可以避免大量的访存,比如一个cache miss,可以直接去其他缓存了的cache中读取。
协议级网络死锁
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ceO0mLQh-1635601969408)(On-ChipNetwork第二章.assets/image-20211030213112001.png)]
除了要考虑信息大小以及种类,共享主存系统还要考虑网络免受协议级死锁。
by the way,这个图可能画的不好哦,两边的cache发出不同名字的请求可能更好一点
协议可以请求几个不同的信息类,每个类包含一组互相独立的一致性动作,也就是说:某类队列中的一个请求信息不会导致同一类另一个请求信息的产生,但是可能触发另一个类的信息
只有当不同类的信息发生了资源依赖才可能产生死锁。
三种典型的类:
- 请求:load store 更新,写回等
- intervention(中转):就是把请求转发到最新数据缓存部分
- 响应:包括invalidation acknowledgements,negative acknowledgements(请求失败),数据(指的是cache block)
可以用大量虚拟链路避免出现死锁。不同的类使用不同的虚链路,循环占有就不会产生了。
虚链路部分还没有开始看,这个问题也是待复现的那篇论文要讨论的事情(死锁避免)
上面一部分基本介绍了关于一致性协议的各种问题
下面一部分开始讨论与cache一致性相关的硬件层次排布带来的影响