【论文导读】 Complexity-Effective Multicore Coherence
目前通用的维护cache 一致性的就是通过MESI或者MOESI来标志cacheline的state,在访问相同的数据时,会进行broadcast或者使用directory的方式进行记录。
论文采取了新的一致性策略VIPS以及改进的版本VIPS-M来进行已执行的维护,即不需要broadcast,也不需要维护directory。
- dynamic write policy 将写回和写直达动态结合,利用了写直达不需要维护cache 一致性的优点
- selective flush 如果当前的core想要写数据,但是在其他的L1中有备份,那么不可避免的会需要snoop其他的L1 cache,那么如何避免snoop?在当前core到达同步点(lock acquire/release, barriers, wait/signal sychronization)的时候自己主动的将所有share的data都自己flush掉,只保留private data,这样就不需要directory记录来实现snoop了。
VIPS : Valid/Invalid/Private/Share
VIPS-M: 额外在MSHR中增加了用于表明dirty word的标志位,用来将false-sharing 的data进行 merge。
具体实现方法
- share的data 使用 write through的方式 考虑到write through可能会对同一个地址的数据进行重复的写,而降低性能,因此在实现了delayed write through,在MSHR中将数据保留,进行merge
- private的data使用write back的方式
- CPU初次获取数据时,拿到的数据就是private类型,这时候就是用write back 策略,等到其他的CPU也访问这个数据,就像数据的类型从private转为share。这时那些之前dirty的数据就需要write back了,不过这种情况比较少见
VIPS:
VIPS-M
对于锁操作的支持:
普通的spin操作会持续的读取到数据的值,但是数据的值在另一个CPU释放锁之前一直不满足,paper中提到的方法则是另一个锁就一直不会读到数据的值,会持续的等待,这样对性能的影响也很小。
欢迎关注我的公众号《处理器与AI芯片》