zoukankan      html  css  js  c++  java
  • 存储器的层次结构&程序的性能

    1.存储器的层次结构

      存储器系统具有层次结构,各个层次的存储设备具有不同的容量、不同的成本以及不同的访问时间;位于第i层的更小更快的存储设备,作为第i+1层更大更慢的存储设备的缓存,数据总是以块为传送单元,在第i层和i+1层之间来回拷贝。

      当程序需要第i+1层的某个数据对象时,它首先在在第i层查找,若查找成功,称为缓存命中,直接从该层读取该数据对象;否则,称为缓存不命中,此时,从第i+1层的缓存中取出包含该数据对象的块,存放到第i层的缓存,或按照某种替换策略覆盖第i层的一个块。

    2.程序的性能

      性能较好的程序,更倾向于频繁的访问存储器中较高层次的存储设备(大多数数据可以从较高层得到服务),这样CPU就能更快地访问到其中的数据项。之所以这样做能够行之有效,是因为计算机的程序具有局部性,具有较好局部性的程序,倾向于访问相同的数据项集合和邻近的数据项集合。

      局部性:

      时间局部性,被引用过一次的存储器位置很可能在不远的将来被多次引用;

      空间局部性,如果一个存储器位置被引用了一次,则程序很有可能在不远的将来引用其附近的一个存储器位置。

      评价程序中局部性的简单原则(编写高效出代码的原则):

      (1)重复引用同一个变量的程序具有较好的时间局部性;

      (2)程序引用模式的步长越小,空间局部性越好;

      (3)对于取指令而言,循环具有较好的时间和空间局部性。

    3.小结

      总之,考虑存储器的层次结构和程序的局部性,我们能够编写出更加高效的代码。我们需要按照数据对象在存储器中的存储顺序,以步长为1来读取数据;一旦从存储器中读取了某个数据对象,就要尽可能地多使用它;此外,由于大部分计算和存储器的访问都发生在内循环上,我们应当将注意力集中在代码这一部分。  

    相关链接:

      处理器的体系结构 https://www.cnblogs.com/yongjin-hou/p/13604296.html
      虚拟存储器 https://www.cnblogs.com/yongjin-hou/p/13543320.html

    参考书籍:Randal E.Bryant  David R.O'Hallaron 著,龚奕利  雷迎春 译,《深入理解计算机系统》,机械工业出版社 

  • 相关阅读:
    POJ 2031 Building a Space Station
    [Codeforces 623A] Graph and String
    [Codeforces 986E] Prince's Problem
    [Codeforces 496E] Distributing Parts
    [Codeforces 1037E] Trip
    [Codeforces 1037D] Valid BFS?
    [Codeforces 666B] World Tour
    [Codeforces 449B] Jzzhu and Cities
    [Codeforces 475B] Strongly Connected City
    [Codeforces 437C] The Child and Toy
  • 原文地址:https://www.cnblogs.com/yongjin-hou/p/13529924.html
Copyright © 2011-2022 走看看