Chinaunix首页 | 论坛 | 博客
  • 博客访问: 329858
  • 博文数量: 130
  • 博客积分: 10
  • 博客等级: 民兵
  • 技术积分: 554
  • 用 户 组: 普通用户
  • 注册时间: 2012-07-19 19:24
文章分类

全部博文(130)

文章存档

2016年(31)

2015年(16)

2014年(13)

2013年(70)

分类: C/C++

2014-05-11 22:48:35

我们在进行并行程序的编程的时候,总是要考虑到互斥。但是我们平时所用的互斥锁,信号量这些是怎么来实现原子操作的啊,怎么来保证程序执行的顺序的啊。带着好奇学习了相关的内存屏障,对于理解原子性执行有一定的帮助。
首先来理清两个概念,在平时写程序的时候,我们都会遇到violate 关键字,该关键字只是提醒我们编译器在编译程序的时候,不要优化该变量。每次乖乖的去内存中取吧。
但是对于cpu来说。这并不能起到任何作用,cpu为了提高自己的执行速度,会存在乱序的执行顺序。这时候我们为了提醒cpu不要乱序执行,我们就要应用cpu的特有指令来告诉cpu。
cpu乱序主要是因为store buff 以及invalid queue来提高执行效率导致的??
为了在并行编程中理解cpu来实现cache line一致性,我们需要知道cpu的MSEI状态。
M(MODIFY):CPU特有数据,cache line和内存中的不一致
S(SHARE):共享,cache line和内存一致?
E():CPU特有,cache line与内存一致
I(IVLAID):EMPTY,无数据
阅读(1120) | 评论(0) | 转发(0) |
0

上一篇:gcc asm学习

下一篇:程序员编译学习

给主人留下些什么吧!~~