CPU缓存
CPU高速缓存类型有一级缓存,二级缓存,三级缓存。
在读取数据时会先从一级缓存查找,再找二级缓存,再找三级缓存,然后是内存,最后是外存储器。读写数据时为了保证数据一致性,各大cpu厂商定义的一套公共协议-MESI协议,从而保证数据最终一致性
MESI协议
修改态, 专有态,共享态,无效态,
-
CPU性能优化手段-运行时指令重排序
为了提高CPU处理新能,CPU遵循as-if-serial语义,可能将后面的命令优先执行
as-if-serial语义
编译器和处理器为了提高并行度,不管怎么重新排序,单线程内程序的执行结果不能被改变
内存屏障 多核多线程
- 缓存的数据与主内存的数据并不是实时同步的,同一时间点,各CPU所看到同一内存地址的数据值可能不是一致的
- 虽然遵循了as-if-serial语义,但只针对单CPU自己执行情况下,无法分辨因果关联,可能会出现乱序
处理器为了解决以上两个问题,提供了内存屏障指令Memory Barrier
-
读内存屏障(Load Menory Barrier)
在指令钱插入Load Barrier 让高速缓存的数据失效,强制从主内存加载数据,从而保证读取数据保存一致性 -
写内存屏障(Store Menory Barrier)
在指令后插入Store Barrie 能让数据写入主内存中,让其他线程可见。
网友评论