美文网首页
处理器的猜测执行(gold_axe)

处理器的猜测执行(gold_axe)

作者: 胖达_4b7e | 来源:发表于2020-02-05 18:53 被阅读0次

    https://book.douban.com/subject/27034721/

    cpu的一种乱序执行

    先执行if里面的内容, 再算if语句, 如果是false, 扔掉就好了

    比如

    public class SpeculativeLoadExample {
      
      private boolean ready = false;
      private int[] data = new int[] { 1, 2, 3, 4, 5, 6, 7, 8 };
    
      public void writer() {
       
        for (int i = 0; i < data.length; i++) {// 语句①(for循环语句)
          data[i] =1;
        }
        ready = true;// 语句②
      }
    
      public int reader() {
        int sum = 0;
        int[] snapshot;
        if (ready) {// 语句③(if语句)
          for (int datum : data) {// 语句④(for循环语句)
            sum += datum;// 语句⑤
          }
    
        }
        return sum;
      }
    }
    

    里面

        if (ready) {// 语句③(if语句)
          for (int datum : data) {// 语句④(for循环语句)
            sum += datum;// 语句⑤
          }
         }
    

    sum可能会先算好(大不了ready是false不成立,就浪费一下白算)

    如果是多线程执行, 一个线程执行writer, 另一个线程同时执行reader,

    原来的目的是, write好了 把ready改成 true 以后, reader才可以执行里面的sum求和,
    但是 因为猜测执行, 先算了sum求和
    这样reader就返回了一个不符合原本预期的sum

    相关文章

      网友评论

          本文标题:处理器的猜测执行(gold_axe)

          本文链接:https://www.haomeiwen.com/subject/kjxexhtx.html