免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 4485 | 回复: 2

Memory Ordering [复制链接]

论坛徽章:
0
发表于 2015-02-06 15:09 |显示全部楼层

                       处理器0                                        处理器1



                   mov [_x], 1                                   mov [_y], 1

                   mov r1, [_x]                                  mov r3, [_y]

                   mov r2, [_y]                                  mov r4, [_x]



注:初始时,x = 0,y = 0;r2 = 0且r4 = 0是被允许的



为什么r2=0和r4=0是被允许的。
mov r2, [_y] 在执行前不是应该先直行mov r1, [_x]么,mov r1, [_x]直行前不是先直行mov [_x], 1 ,此时的已经为1

那么再执行处理器1的流程,则r4=1,r2=0

难道mov r2, [_y]可以先于mov [_x], 1    执行么?

论坛徽章:
7
天秤座
日期:2014-08-07 13:56:30丑牛
日期:2014-08-27 20:34:21双鱼座
日期:2014-08-27 22:02:21天秤座
日期:2014-08-30 10:39:11双鱼座
日期:2014-09-21 20:07:532015年亚洲杯之日本
日期:2015-02-06 14:00:282015亚冠之大阪钢巴
日期:2015-11-02 14:50:19
发表于 2015-02-06 16:07 |显示全部楼层
菜鸟没太看明白题目。。。
CPU0和CPU1的指令是最后已经确定生成了的指令吗?
mov r2, [_y]
mov [_x], 1
这两条指令看起来如果_x和_y不存在别名关系,两者之间应该不存在任何依赖,指令调度顺序应该是可以乱序的吧。
此外还有这种架构下的内存->寄存器的move是否有latency导致?
比如:
Time0:
指令mov [_x], 1发射,但是实际内存完成写操作要到Time2.
Time1:
指令mov r2, [_x]发射,可能已经开始将_x的数据读取出内存了,这时读取出来的是0.
或者是一个多核同步的问题?

论坛徽章:
0
发表于 2015-02-07 16:58 |显示全部楼层
MeRcy_PM 发表于 2015-02-06 16:07
菜鸟没太看明白题目。。。
CPU0和CPU1的指令是最后已经确定生成了的指令吗?
mov r2, [_y]

这些指令应该是保存在每个CPU的指令Cache中的,下次取指令的时候就会去对应的指令Cache中获取
因为在Memory Ordering 中有如下的规则:
1.读指令(从内存中读)不与其它读指令作重新排序
2.写指令(往内存中写)不与之前的读指令作重新排序
3.对存储器的写不与其它写指令作重新排序,但是有例外(入CFLUSH等指令)

这些就是针对单个核心的CPU的规则:

所以

                   1)mov [_x], 1                                   4)mov [_y], 1

                   2)mov r1, [_x]                                  5)mov r3, [_y]

                   3)mov r2, [_y]                                  6)mov r4, [_x]



那么根据以上的执行规则那么按照时间轴的顺序应该是有如下情况:

1->2->3->4->5->6

1->4->5->6->2->3

1->4->2->3->5->6

4->1->2->5->6->3
等等

因为123,456他们的执行顺序不能变,见上面的规则

所以
不管是1还是4先执行那么r2和r4都不能同时等于0,那么关于这个可以同时等于的结论是如果实现的?




您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP