正文

SMP Memory Access and Barrier学习笔记[zt]2008-01-14 15:07:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/ljqy/32188.html

分享到:

原文:http://topic.csdn.net/t/20060718/01/4886655.html

Memory   Barrier这一块,比较绕脑子。Write   barrier好理解,就是把write操作在时间上划一个栅栏。但是read   barrier就复杂不少,不能简单理解为把read操作在时间上划一个栅栏。但是Intel的手册上对于read   barrier的讲解与write   barrier类似——全然不顾read   barrier理解起来更复杂。还是Redhat写得文档帮了大忙。  
  好吧,牢骚发完,下面将我的理解:  
   
  关于Memory   Barrier的时间序列有三条,这三条序列的第一条和最后一条在同一个CPU中是可以各自保证因果关系的,但是对于不同CPU来说,没有必然的因果关系而且三个序列都是独立的:  
  ***   Sequence   of   CPU   committing   write   to   memory.  
  ***   Sequence   of   CPU   perceiving   memory   change,   usually   delayed   and   out   of   order   as   the   actual   memroy   change.  
  ***   Sequence   of   CPU   issuing   read.  
   
   
  Write   barrier:  
  保证write   barrier前的指令在sequence   of   CPU   committing   write   to   memory中一定出现在write   barrier后的指令之前。  
   
   
  Read   barrier:  
  Barrier的保证满足如下的rule。  
  ***   首先保证在read   barrier之前的read肯定比barrier之后的read之后的指令早发出。  
  ***   在sequence   of   CPU   perceiving   memory   change中查找read   barrier以前的read指令被issue的时间点。  
  ***   找出最后的时间点PL。  
  ***   把PL之前perceive到的所有memory   change找出。  
  ***   检查这些memory   change实际commit到memory的时间,找到最后的时间点PC。  
  ***   确保PC之前的所有address1   memory   change都被perceive到,才发出read   address1指令。  
   
  Read   depends   barrier  
  Barrier的保证满足如下的rule。  
  ***   首先保证在read   barrier之前的dependent   read肯定比barrier之后的read之后的指令早发出——其实这一点无需由barrier保证,因为任何CPU都天然满足这一条。  
  ***   在sequence   of   CPU   perceiving   memory   change中查找read   barrier以前的dependent   ***   read指令发生的时间点。  
  ***   找出最后的时间点PL。  
  ***   把PL之前perceive到的memory   change找出。  
  ***   检查这些memory   change实际commit到memory的时间,找到最后的时间点PC。  
  ***   确保PC之前的所有address1   memory   change都被perceive到,才发出read   address1指令  
   
   
  需要说明的一点:除Alpha之外,Linux支持的所有CPU都在hardware-level直接实现了dependent   read   barrier。  
   
  我自己的感想:write   barrier只涉及一个sequence   of   committing的概念,所以比较简单。而read   barrier,不光涉及sequence   of   issuing   read,还要涉及sequence   of   perceivation和sequence   of   commiting这两个概念,所以理解起来困难一些。而Intel   manual上对两种barrier的描述却几乎是对称的,明显confusing。    

阅读(3007) | 评论(0)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

暂无评论
您需要登录后才能评论,请 登录 或者 注册