免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: 南海一钓叟

那为大侠给俺讲讲cache和volatie变量的关系 [复制链接]

论坛徽章:
0
发表于 2008-02-29 16:17 |显示全部楼层
我的意思是对于zx_wing  说的正好,不是正好,而是必须的

论坛徽章:
0
发表于 2008-02-29 16:18 |显示全部楼层
原帖由 flw2 于 2008-2-29 16:14 发表
volatile变量的使用,就是说编译器确保变量和内存是同步的
而是内存与CPU的cache对于这个“同步的”是不透明的,这也就是IA64需要这样的指令来实现volatile(IA32就不需也没有显示的指令),因为不使用这样的指 ...

对对,我觉得总结的太好了。
volatile应该是编译器保证变量同步到内存,至于cache的同步由架构自行实现。IA64不用上面提到的那两个指令也可以实现,因为有其它串行化指令,只是用那两条指令最方便。
所以那句话,cache的同步由架构自行决定,和volatile无关。

论坛徽章:
0
发表于 2008-02-29 16:19 |显示全部楼层
原帖由 zx_wing 于 2008-2-29 16:18 发表

对对,我觉得总结的太好了。
volatile应该是编译器保证变量同步到内存,至于cache的同步由架构自行实现。IA64不用上面提到的那两个指令也可以实现,因为有其它串行化指令,只是用那两条指令最方便。
所以那 ...

恩,我不了解IA64,以为只有那么做才行

论坛徽章:
0
发表于 2008-02-29 16:21 |显示全部楼层
也就是说cache的内容同步有硬件机制完成,而volatile则是编译器优化的时候保证其变量的同步?

我这样理解可以不?

论坛徽章:
0
发表于 2008-02-29 16:31 |显示全部楼层
原帖由 南海一钓叟 于 2008-2-29 16:21 发表
也就是说cache的内容同步有硬件机制完成,而volatile则是编译器优化的时候保证其变量的同步?

我这样理解可以不?

可以吧,变量值和内存同步即可

论坛徽章:
0
发表于 2008-02-29 16:35 |显示全部楼层
volatile肯定是给compiler使用的,这点没有疑议。一般只要cache一致了就可以了,不需要一定写回内存。
不太清楚c标准中对volatile的access order有没有规定,在java的memory model是定义了volatile变量和normal load/save的次序的,哪些可以reorder哪些不可以都有定义。否则的话有些lock free的算法会有问题。

论坛徽章:
0
发表于 2008-02-29 16:41 |显示全部楼层
学习一下

论坛徽章:
0
发表于 2008-02-29 16:42 |显示全部楼层
原帖由 tinywind 于 2008-2-29 16:35 发表
volatile肯定是给compiler使用的,这点没有疑议。一般只要cache一致了就可以了,不需要一定写回内存。
不太清楚c标准中对volatile的access order有没有规定,在java的memory model是定义了volatile变量和norma ...

一般只要cache一致了就可以了,不需要一定写回内存

有误,cache一致必定写回内存。这个是北桥规定的。也就是说不能直接从其它CPU的cache中读值。

论坛徽章:
0
发表于 2008-02-29 16:45 |显示全部楼层
原帖由 zx_wing 于 2008-2-29 16:42 发表

一般只要cache一致了就可以了,不需要一定写回内存

有误,cache一致必定写回内存。这个是北桥规定的。也就是说不能直接从其它CPU的cache中读值。

是所有系统都这样吗,还是特定的系统。似乎这是个很傻的设计,在现在多核的cpu中还要从内存中走一圈吗。

论坛徽章:
0
发表于 2008-02-29 16:51 |显示全部楼层
原帖由 tinywind 于 2008-2-29 16:45 发表

是所有系统都这样吗,还是特定的系统。似乎这是个很傻的设计,在现在多核的cpu中还要从内存中走一圈吗。

应该都是这样的。
并不是说要先写回内存再读出来,举个例子:
CPU2读一个地址的内容,CPU1发现应该做cache同步,于是会把这个地址的最新内容放到总线上,北桥上的内存控制器会做两个动作,一个是把这个最新的内容给CPU2,另一个动作会把最新内容同步到内存中对应的地址上去。

所以说cache同步必定带来内存的同步。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP