AnT*_*AnT 11 c c++ x86 volatile smp
是否有任何C或C++编译器为volatile变量实现"积极"的内存一致性模型?通过"积极"一致性模型,我的意思是伴随所有写入volatile生成代码中具有内存障碍的变量.
AFAIK,这是IA64(Itanium)平台上C或C++编译器的习惯行为.x86怎么样?是否有一个编译器实现(或可以配置实现)类似于Itanium的方法来处理volatilex86平台上的变量?
编辑:我正在查看VS 2005生成的代码(在阅读注释后),并且在访问volatile变量时我没有看到任何类似于任何内存屏障的内容.由于MESIF(英特尔)和MOESI(AMD)缓存协议,这对于确保单CPU多核x86平台上的内存一致性非常好.
但是,在多CPU SMP x86平台上,这似乎不够.SMP平台在生成的代码中需要内存屏障,以确保CPU之间的内存一致性.我错过了什么?当微软宣称他们已经拥有volatile变量的获取释放语义时,他究竟是什么意思呢?
应该注意的是,x86 CPU 既不会对负载与其他负载进行重新排序,也不会对存储与其他存储进行重新排序。因此,不需要明确的障碍。
MSVC 编译器将确保加载不会使用 易失性加载重新排序,并且存储不会使用易失性存储重新排序(当然,我现在正在讨论重新排序加载和存储指令),从而分别保证易失性加载和存储的获取和释放语义。
| 归档时间: |
|
| 查看次数: |
557 次 |
| 最近记录: |