zoukankan      html  css  js  c++  java
  • cache中的thrashing问题和应对办法

    来自csapp的第6章.

    这段代码看上去局部性不错.
    如果cache的参数是(2,1,4,6), 也就是有2个set, 直接映射, 一个block是16 byte, 可存4个浮点数.
    如果x,y的起始地址分别是0, 32.
    对x[0], set对应0, 对y[0], 地址是32, 100000, set对应是0, 直接替换了x之前载入的x[0]-x[3]. 之后也是类似, 整个过程命中率是0.

    为什么会这样?
    设x的起始地址为ax, 设x与y对应的内存偏移是t. 那么什么情况下, ax与ax+t对应的set index会是一样的?
    ((ax)%2(b+s))/2b=((ax+t)%2(b+s))/2b成立的时候.
    b是offset bits的长度, s是index bits的长度(也就是用来标志set的位数)
    在这里, t=32, b=4, s=1, 发现仅仅是做了%2^(b+s)之后, 就已经相等了, 因为t是2^(b+s)的倍数.

    如果想要它总是不相等怎么办? t需要再加x, 且满足x/2^b>=1, <2^(b+s), 这样就能保证不相等了. 最简单地, 只要取2^b, 就一定不相等.
    这里b=4, 因此2^4=16, float的size是4, 因此padding为float[4]. 改x为float[12]即可. 差不多是通用公式了, 保证x与y的偏移%2^b为1就行(其它的也可以, 但要<2^s).

  • 相关阅读:
    让tomcat启动时,自动加载你的项目
    ssh整合 小例子
    hibernate入门(二)
    java引用问题(—)
    hibernate入门(-)
    IOC入门1
    百度知道回答的依赖注入
    spring
    ibatis 优点,未完版
    Data Structure Array: Sort elements by frequency
  • 原文地址:https://www.cnblogs.com/Tokubara/p/13944373.html
Copyright © 2011-2022 走看看