/**
* 计算机体系结构(4)
* @缓存性能的是高级优化方法
* 1.小而简单的第一级别缓存,缩短命中时间,降低功率
* 提高时钟频率和降低功率的双重压力都推动第一级别缓存的大小限制;
* 缓存命中【路径中】的三个关键步骤
* #使用地址中的索引确定标记存储器的地址
* #将读取的标签值和地址进行比较
* #如果缓存为组相联缓存,设置多路转化器选择正确的数据项
* 直接映射的缓存可以将标记核对与数据传输重叠起来,有效缩短命中时间
*
* 2.采用路径预测以缩短命中时间
* 缓存中保存了另外一些bit,用于预测下一次缓存访问组中的路和块
* 尽早设置多工选择器,以选择所需要的块,在与缓存数据读取并行的时钟周期,只执行一次标签比较
* 如果缺失,则会在下一个时钟周期中查看其他的块,找出匹配项
*
* --
* 在一个缓存的每个块中都保存一些额外的块预测位
*
* 3.实现缓存访问的流水化,提高缓存宽带
* 使第一级别缓存命中的实际延迟可以分散到多个时钟周期【多核的基础】从而缩短时钟周期的时间和提高带宽,但是会减缓命中速度
*
* 4.采用无阻塞缓存,提升缓存带宽
* ---允许数据缓存存在一次缺失期间继续提供缓存命中
* 对于运行流水化执行的乱序执行计算机
* 处理器不会因为一次数据缓存缺失而停顿
* 例如,处理器在等待从缓存中返回缺失数据,可以继续从指令缓存中继续提取指令进行执行
*
* 5.采用多种缓存以提高缓存带宽
* 多种?——一种中的多个独立种——人类细胞起源——1生2,3生万物
* 可以将缓存划分为多个独立的,支持同时访问的缓存组。而不是一个整体;
*
* 6.关键字优先和提前重新启动以降低缺失代价
* 技术的事实基础人们观测到处理器在某一时刻通常仅需要缓存块的一个字
* #关键字优先
* 首先从存储器中请求缺失的字
* 在到达缓存之后立即发送给处理器
* 使处理器能够在载入其他快中的字继续执行
* #首先重启
* 通过正常顺序提取字,但只要块中的字到达缓存区就立即发送给处理器,让处理器继续执行
*
* 7.合并写缓冲区以降低缺失代价
* 如果缓冲区为空,数据和整个地址被写到缓冲区,写操作完成
* 如果缓冲区中的其他经过修改的块则检查他们地址看看新数据的地址是否和写缓冲区中的有效项目地址匹配
* 匹配则进行项目合并
*
* 8.采用编译器优化降低缺失率
* 1.循环交换
* 嵌套循环的非连续顺序访问数据
* 只需要交换一下顺序就可以顺序访问
* 如果缓存中无法容纳这些数组,可以提升空间局域性减少缺失
* 通过重新排序可以最大限度使用
*
* 2.分块
* 不是对行和列进行操作
* 是对其子矩阵进行操作
* 目的是在缓存中载入的数据被替换之前最大限度使用
*
* 9.对指令和数据进行硬件预取,降低缺失代价和缺失率
* 处理器项目请求之前,预先加载缓存
* 指令和数据可以预先提取,放大速度更快的主存储中
* 指令和数据的预取经常在外部的硬件中完成
* 通常处理器在缺失缓存的情况下回提取两个块,一个是所需要的命中块,另一个是与之相邻的块
* 如果当前流缓存中存在所需块则直接读取,然后继续发送新的预取请求
*
* 10.用编译器控制预取
* 编译器请求预取指令两种
* 寄存器预取 将数据加载的一个寄存器中
* 缓存预取 仅将数据载入到缓存中而不是寄存器中
* --
* 只有当处理器在预取的情况下能够正常工作才有价值
* 缓存在等待预取数据时候不会出现停顿,可以继续提供数据和指令
* 这些计算机的数据缓存通常是非阻塞性质的
*
*
*/
来源《计算机体系结构》