CPU性能优化手段 - 缓存
为了提高程序的运行性能, 现代CPU在很多方面对程序进行了优化
例如: CPU高速缓存, 尽可能的避免处理器访问主内存的时间开销, 处理器大多会利用缓存以提高性能
?...语义, 也就是说, 编译器和处理器不会对存在数据依赖关系的操作做重排序
两个问题
CPU高速缓存下有一个问题:
缓存中的数据与主内存的数据并不是实时同步的, 各CPU间缓存的数据也不是实时同步....在同一时间点, 各CPU所看到的同一内存地址的数据的值可能是不一致的.
CPU执行指令重排序优化的一个问题:
虽然遵守了as-if-serial语义, 但仅在单CPU自己执行的情况下能保证结果正确....多核多线程中, 指令逻辑无法分辨因果关联, 可能出现乱序执行, 导致程序运行结果错误
解决方法 - 内存屏障
处理器提供了两个内存屏障指令(Memory Barrier)用于解决上述两个问题:
写内存屏障...读内存屏障(Load Memory Barrier): 在指令前插入Load Barrier, 可以让高速缓存中的数据失效, 强制从新从主内存读取数据
强制读取主内存内容, 让CPU缓存和主内存保持一致