• 焰火
    2019-07-19
    数据从cpu --> 寄存器 --> 内存, 数据从CPU到内存中间有个寄存器,寄存器和内存数据交换应该也是整页交换,如果不顺序写回寄存器的话,很有可能在寄存器页边界的时候,到内存发生时间差,导致后面寄存器再重新取内存的时候发生数据错误,之前数据不依赖,不保证后面数据不依赖。所以还是顺序写回比较安全。
     1
     10
  • xindoo
    2019-06-19
    我觉得强内存模型是为了保证不同指令对同一内存地址的读写正确性,不同指令的执行不仅仅有寄存器数据依赖,还会有内存数据依赖。
     2
     2
  • cc
    2019-06-20
    老师,有一点没想明白。五级流水线,取指令-译指令-执行-访存-写回。这里的访存是干什么的?能否具体举例讲一讲?我理解访存是把数据读入寄存器。那这样的话,访存应该先于执行才对。感谢答疑
     1
     1
  • Leon📷
    2019-06-19
    搜了下资料,假如有两个阶段,之间没有数据依赖,第一个阶段判断变量a是否为true,再执行,否则退出。第二个阶段直接把a置为false,如果乱序执行,第二个阶段先执行影响业务逻辑,第一个阶段本来可以执行的,现在直接退出了
    
     1
  • 许先森
    2020-01-14
    我的思考是上面的例子只是简单的计算,会不会是后面有一些逻辑运算对a和x的结果读取有顺序要求,如果不保证先正确读取a再正确读取到x的话会对逻辑运算有影响。

    作者回复: 许先森同学,

    会啊,所以需要有冒险检测,以及触发数据冒险,用NOP去填充一些流水线的位置,避免程序出错。

    
    
  • 许先森
    2020-01-14
    “3. 这些指令不会立刻执行,而要等待它们所依赖的数据,传递给它们之后才会执行。这就好像一列列的火车都要等到乘客来齐了才能出发。”
    这里有个问题啊,所有指令都是在保留站中等待自己依赖的数据,那如果依赖的是上一条指令的结果呢?

    作者回复: 许先森同学,

    你好,这个就是会触发数据冒险,把整个指令执行往后延。

    
    
  • Hash
    2019-12-18
    我觉得如果不保证它们的执行顺序的话,那最终得到的结果也可能不是我们期望的结果

    作者回复: Hash同学,

    你好,可以想一想具体在什么情况下,会不是我们预期的结果呢?

    
    
  • loser
    2019-12-09
    应该是数据一致性问题,多核访问相同的内存。但是有自己的缓存,寄存器。

    作者回复: 👍

    
    
  • 拯救地球好累
    2019-10-27
    ---问题---
    老师您好,对于指令提交部分不是很理解,如果指令提交部分依然是需要保证原有指令顺序的话,那不是在这个部分先完成的指令依然要等待原有顺序在它之前的指令的完成,比如“x = y * z”要等待“d = a * e”的执行完成才能提交?
    
    
  • Better me
    2019-10-08
    对于老师在文中举例的三行代码,由于都是加法指令那么是否有可能前两行代码先被转发进行优化,而不出现文中老师说的这种情况呢?如果是这样那相当于第2、3条指令都会插入一个NOP,应该和文中说到的情况能达到一样的优化效果。还有文中老师说到的这种乱序执行优化,第2条指令在等待第1条指令访存,而此时由于乱序执行优化仍然要保持最后的提交顺序,指令1的结果并不会写会到寄存器中,而是输出到重排序缓冲区,那么此时指令2是到缓冲区拿到的依赖数据吗?老师有空解答一下
    
    
  • 曾经瘦过
    2019-10-08
    保障内存访问的顺序 就类似于在编程中多线程对同一个变量的操作一样,会导致数据不可预测,导致出错
    
    
  • prader
    2019-09-22
    1 增加高速缓存和指令跳转解决的是,一条指令,的效率问题。这样,一条大指令执行顺序还是顺序执行。
     2 乱序执行,是指在指令执行之前,和指令执行之后分别增加保栈和指令缓冲区,确保指令能够异步执行。
    
    
  • Mango
    2019-08-28
    思考题,感觉是内存屏障,防止多核CPU操作共享内存时出现数据冒险问题。

    作者回复: Mango同学你好,

    可以更具体一点么,离答案很接近了,但是我认为这个不能叫做“数据冒险”问题。

    
    
  • 小先生
    2019-08-27
    课后思考题回答:
    如果数据写回不是按照顺序的话,如果对同一个数据的修改顺序反了,可能导致最终的结果就是错误的
     1
    
  • -W.LI-
    2019-06-24
    老师好!非常通俗易懂,不过story buffer(存储缓冲区)我是第一次见。老师能稍微介绍下么?寄存器->多级高速缓存->主存之前的理解是这样的。。
    
    
  • -W.LI-
    2019-06-24
    感觉判断,数据是否准备就绪有点难度,老师后面会讲么?乱序执行的时候怎么保证依赖顺序正确。数据依赖,反依赖,输出依赖那个。
    
    
  • 古夜
    2019-06-20
    老师好,有没有什么思路从硬件角度理解多线程呢?有什么资料可以作为参考呢?
    
    
  • coder
    2019-06-20
    强内存模型可以保证数据的一致性🌝🌝
    
    
  • 鱼向北游
    2019-06-19
    思考题应该是程序真实逻辑有时候会依赖内存访问顺序,而不是单单依赖数据的计算结果正确性吧
    
    
  • lzhao
    2019-06-19
    计算后的值写到Store Buffer中,什么时候写道主内存和寄存器呢?带来的可见性问题,通知屏障指令又是怎么解决的,能单独开一章节讲这个问题吗?或者我加你的联系方式,单独针对几个问题问一下?谢谢
    
    
我们在线,来聊聊吧