免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: h168ch
打印 上一主题 下一主题

再问一个关于cpu cache的问题 [复制链接]

论坛徽章:
0
11 [报告]
发表于 2007-12-02 18:42 |只看该作者
熟悉IA32的朋友会帮你的,帮你顶。
理论上讲清空或者说填上随机产生的数据效果是一样的,除非NULL或你的随机数据恰好是要写进去的数据。

论坛徽章:
0
12 [报告]
发表于 2007-12-02 18:47 |只看该作者
ia32的话
可以清cache,但是不能将自己的值写进去

清空的办法有几种
1是刷CR3
2是用WBINVD指令(推荐)

如果楼主只是不想用cache,可以在一开始就把CR0里面的CD标志位置位,然后cache就不会更新了。
注意只是不会更新,已经准备好的cache还是会被使用,所以要在一开始关闭;或者关闭之后再用WBINVD

论坛徽章:
0
13 [报告]
发表于 2007-12-02 19:00 |只看该作者

回复 #12 dxcnjupt 的帖子

谢谢!我只是想测试之前清除cache的数据,测试的时候还要用到cache,cache不能关闭,请问这个WBINVD指令可以做到这一点吗?

论坛徽章:
0
14 [报告]
发表于 2007-12-02 19:50 |只看该作者
原帖由 h168ch 于 2007-12-2 13:18 发表
请教各位大侠,有什么办法可以把cpu 的cache清空,或者把cache用随机产生的数据填满?
谢谢!


一、将 cache 清空可以:
1、invd 指令刷新 cache
2、wbinvd 指令刷新 cache 并回写 memory
3、clflush 指令刷新 cache line

二、用随机产生数据填满 cache 可以:
1、先在 memory 中产生随机数据
2、使用 prefecth 系列指令加载到 cache 中

论坛徽章:
0
15 [报告]
发表于 2007-12-02 20:00 |只看该作者

回复 #14 mik 的帖子

大侠就是大侠。。。
谢谢!

论坛徽章:
0
16 [报告]
发表于 2007-12-02 20:10 |只看该作者

回复 #14 mik 的帖子

1、invd 指令刷新 cache
2、wbinvd 指令刷新 cache 并回写 memory
3、clflush 指令刷新 cache line
这些指令运行以后cache是不是就无效了,我只是想把cache刷新一下,后面的程序还要用到cache,cache里面的数据可以不要,请问这些指令可以吗?

论坛徽章:
0
17 [报告]
发表于 2007-12-02 20:30 |只看该作者
原帖由 h168ch 于 2007-12-2 20:10 发表
1、invd 指令刷新 cache
2、wbinvd 指令刷新 cache 并回写 memory
3、clflush 指令刷新 cache line
这些指令运行以后cache是不是就无效了,我只是想把cache刷新一下,后面的程序还要用到cache,cache里面的数 ...

CR0.CD 才会置 cache 无效,刷新只是清空当时的数据

论坛徽章:
0
18 [报告]
发表于 2007-12-03 18:25 |只看该作者

回复 #17 mik 的帖子

再问一个比较低级一点的问题,我在linux下用c语言写了个小程序,在里面用asm嵌入了上面的命令,然后用gcc编译运行,编译可以通过,运行的 时候提示断错误,为什么 会出现这种情况呢?怎么做可以在 c语言里嵌入上面的命令呢?

论坛徽章:
0
19 [报告]
发表于 2007-12-04 11:44 |只看该作者
wbinvd是特权指令......要在ring0才能用
clflush 好像不是一个具体的指令吧,查文档没找到,试着用nasm编译也编不出来。

如果楼主不想进ring0,可以用Mik说的那个办法。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP