赞
踩
首发于个人博客
存储器的性能直接影响到CPU的性能评价,定义存储器停顿周期数为CPU等待存储器访问而停顿的时钟周期数,由此有CPU执行时间有:
因此需要存储器停顿时钟周期数越小越好,对于这一变量有公式如下:
其中,缺失率表示存储器访问指令中会产生cache缺失的百分比;缺失代价表示发生cache缺失后为了解决缺失需要消耗的平均时钟周期数。另一种度量指标与时钟周期无关,即为每条指令的平均缺失数:
上述公式与缺失代价无关,缺失率的定义与上文相同
缓存性能比较好的度量为存储器平均访问时间,即对于每次存储器访问而言需要的平均时间,公式如下:
需要注意的是这一指标仅针对存储器访问指令,因此这是一个间接度量,考虑以下情况:
参数 | 数据 |
---|---|
16KB指令缓存缺失数(每千条指令) | 3.82 |
16KB数据缓存缺失数(每千条指令) | 40.9 |
32KB统一缓存缺失数(每千条指令) | 43.3 |
统一缓存数据访问额外需要时钟周期数 | 1 |
存储器访问中指令引用占比 | 74% |
命中周期数/缺失代价 | 1/100 |
指令中数据传输指令占比 | 36% |
需要注意的是,缺失数指的是对于所有指令而言产生存储器缺失的次数,而缺失率为相对于所有存储器访问产生缺失的比例。对于16KB的指令缓存,每条指令都会产生一次指令访问,缺失率为:
对于16KB的数据缓存,有36%的指令会产生一次存储器访问,因此有:
有74%的存储器访问为指令访问,因此总体的缺失率为:
考虑存储器平均访问时间,有:
对于32KB统一缓存而言,1000条指令一共产生1000次指令访存,其中36%的指令会产生数据访存,如下所示:
对于统一缓存而言,数据访存指令会产生两种存储器访问,一次指令访问和一次数据访问,而统一缓存仅有端口,因此数据访问需要等待一个时钟周期,因此存储器平均访问时间:
对于CPU性能而言,有以下公式:
一般认为缓存命中时间作为CPU执行时钟周期数的一个部分,考虑一个以下参数的缓存:
参数 | 数值 |
---|---|
CPU执行周期数 | 1 |
缺失代价 | 200 |
平均缺失率 | 2% |
每条指令的存储器引用数 | 1.5 |
平均缓存缺失数(千条指令) | 30 |
对于以上参数,每千条指令产生的存储访问数为,存储器访问的缺失率为2%,即千条指令产生的存储器缺失数量为,与给出的平均缓存缺失数一致。使用缺失数计算CPU执行时间:
上述分析均对于顺序存储器而言,其每次存储器缺失都会暴露为缺失代价。对于乱序处理器而言,其存储器缺失可能被乱序执行的其他指令掩盖,即有:
对于乱序执行的CPU而言,分析比较复杂,若一个时钟周期该CPU没有提交最大可能数目的指令,则认为该CPU发生的了存储器访问缺失。
存储器之间的关于存储器层次结构,需要解决以下四个问题:
首先定义组的概念,一个组是存储器中的一段连续空间,可以容纳多个(整数个)块。取一个存储器中组的数量为m,每个组可以容纳的块的数量为n,有以下关系:
任何来自某个地址的块只能被放置在一个特定的组中,这种方法被称为组相联,一个组中可以容纳n个块,即为n-路组相联。块首先被映射到组,组编号为:
随后,这个块可以被放置在这个组中的任意块地址位置。即对于一个块地址为A的块而言,对应的组编号为,其可以被放置在这个编号为G的组中的任意有效的块起始地址位置。如下图所示:
对于组相联,有两种特殊情况:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。