标签:提升性能 设计 读取数据 lock block 体系 结果 函数 名称
基于《计算机体系结构:量化研究方法》第3章 指令级并行及其开发
本章内容主要面向计算机设计人员和编译器开发者,因此只记录一些感兴趣的点。
指令级并行(ILP)就是多条指令同时执行,达到提升性能的目的。因为执行一条指令可以分为多个操作(取码、译码、执行等),所以可以通过流水线模式做到ILP。
每个操作都是独立的功能单元来处理
指令之间可能存在相关性,即后面的指令需要等待前面的指令完成,这会导致流水线停顿。
有以下几种相关
当出现相关指令时,可以通过重排序,将无关的指令提前执行(乱序执行),避免流水线停顿。
重排序可以是
重排序需要注意规避以下三种数据风险
此外如果是控制相关的话,重排序还需要遵循以下两个约束
当指令执行出现异常时,需要回退该指令之后的指令执行结果。乱序执行时,后续指令的结果可能已经写入寄存器或存储器,回退成本很高,因此就有了重排序缓存。乱序执行的指令执行结束后会先保存在重排序缓存中,最后顺序提交。当出现异常时,不提交即可,做到精确异常。
当存在控制相关的指令时,如果发生跳转,那么流水线中的后续指令可能都会失效,这会导致严重的性能损耗。为了解决这问题,就有了分支预测。
很多优化其实都是由编译器完成的,对于像我这种级别的程序员来说,就是知道
__builtin_expect()
函数来增加分支预测的准确率。标签:提升性能 设计 读取数据 lock block 体系 结果 函数 名称
原文地址:https://www.cnblogs.com/yizui/p/10635483.html