zoukankan      html  css  js  c++  java
  • 分层存储体系结构

    为什么需要分层存储?因为我们想要存储又大又快,但是只用一层存储无法达到目的,所以我们采用多层存储让那些越大越慢的数据距离处理器远一些,并确保处理器需要的大多数数据存储在更快的层中。

    分层存储的基本原则

    局部性原理

    最近使用的代码或者数据很有可能在不久的将来继续用到。

    局部性原理分为:时间局部性、空间局部性。

    一个程序可能在其生命周期中引用不同的内存位置,但不是在同一时间。

    避免重复运算

    如果计算某个东西计算代价很高,那么可以记住一会儿答案,以防不久之后又需要它。

    需要局部性的支持。如果缺乏局部性,会存储大量不同的数据,同时很可能查询大量数据的开销会大于重新计算的开销。

    成本均摊

    如果成本可以平摊到多个单元上,那么理论上可以承受较大的成本开销。

    Cache理论基础

    原理

    时间局部性:这个数据马上就会被再次访问,所以把这个数据放到一个可以快速访问的内存中。
    空间局部性:这个数据周围的数据马上也会被访问,所以把这个数据附近的所有数据(block)放到可以快速访问的内存中。

    流水线中的Cache

    我们希望cache的存取尽可能快,而在高频的流水线中,每个流水段的时间其实也是很快的,那么为了使cache尽可能大并且可以满足流水线的高频访问,所以对cache进行分层处理。目前的处理器都存在着多级的cache(L1,L2 cache等)。

    那么谁来管理分层数据迁移?早期的是由程序员来管理的,而现在绝大多数情况是硬件来做的,所以对程序员来说是透明的,但是如果我们能在写代码的时候利用一些硬件的性质,就可以让我们的程序跑得更快。

    其中管理cache的硬件就是我们说的内存管理单元(MMU)。

    分层的延迟分析

    假设一个给定的存储层次(i),它技术上固有的访问时间是(t_i),我们感受到的访问时间是(T_i,(T_i>t_i))

    除了最外层,最外层中包含着数据的源地址,而其他层中都是这些数据的某些拷贝。当访问一个固定地址时,可能命中也可能缺失,那么:

    如果命中(命中率是(h\%)),访问时间是(t_i)
    如果缺失,访问时间是(t_i+T_{i+1})(T_{i+1})表示下一层感知到的访问时间。

    因此

    [T_i = h_i*t_i+(1-h_i)*(t_i+T_{i+1})=t_i+(1-h_i)*T_{i+1} ]

    因此我们希望((1-h_i)*T_{i+1})尽可能的低,所以我们可以降低缺失率,或者减少下一层的感知访问时间。

    对于降低缺失率,我们可以增加cache的容量,但是这会使得(t_i)增加;还可以通过更好的管理降低缺失率,比如更好的替换策略以及更好的预取策略。

    对于减少下一层的感知访问时间,可以从材料上使下一层访问更快,但是这会使成本增加;或者引入中间层做出折中。

    这里看一个Intel Pentium 4的例子:

    可以看到减少缺失率带来的收益是非常显著的。

    关于Cache的详细内容,且听下回分解hhh

  • 相关阅读:
    Atitit (Sketch Filter)素描滤镜的实现  图像处理  attilax总结v2
    JS设置cookie、读取cookie、删除cookie
    Atitit 图像处理30大经典算法attilax总结
    Atitit数据库层次架构表与知识点 attilax 总结
    Atitit 游戏的通常流程 attilax 总结 基于cocos2d api
    Atitti css transition Animation differ区别
    Atitit 图像清晰度 模糊度 检测 识别 评价算法 源码实现attilax总结
    Atitit 全屏模式的cs桌面客户端软件gui h5解决方案 Kiosk模式
    Atitit 混合叠加俩张图片的处理 图像处理解决方案 javafx blend
    Atitit  rgb yuv  hsv HSL 模式和 HSV(HSB) 图像色彩空间的区别
  • 原文地址:https://www.cnblogs.com/LuoboLiam/p/13427254.html
Copyright © 2011-2022 走看看