最近在多核ARM芯片上搞并行计算,涉及到核间数据交互,因此对多核cache coherence稍作探究。想解决的疑问是:各个核之间是否“知道”内存中的数据被其他核进行了改动?有何机制来保障cache coherence?
CSAPP中似乎没有具体谈到多核之间cache是如何配合的(我看的是2ed,不知道3rd中是否有增加),但是在CMU Introduction to Computer Systems (ICS)课程中,最后一课正好讲的是Multi-core architectures,Slide十分NICE!
Slide中提到了两种基础的solutions for cache coherence:
1.Invalidation protocol with snooping
每个core都在监听inter-core bus的消息,假如其他的某个core更改了内存的数据,就及时地无效掉本地core相应的cache。
2.update protocol
二者对比,通常来说Invalidation protocol会表现得更好,比如当对某一块内存进行多次更改时,只需要在第一次时进行无效操作。