免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 3906 | 回复: 10
打印 上一主题 下一主题

关于数组的预取 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-12-21 18:09 |只看该作者 |倒序浏览
我有一个512大小的char数组,想在使用它之前先把它预取进来。在靠前一些的位置我用
#define PRE(a) ({\
        asm("pref 4,0(%0)\n\t"\
        ::"r"(a));\
})
这个宏来做预取工作,但没有明显效果。请指教这是怎么回事,是不是pref用错了···

论坛徽章:
0
2 [报告]
发表于 2009-12-21 23:19 |只看该作者
list_head 的prefetch是如何做的?

论坛徽章:
0
3 [报告]
发表于 2009-12-21 23:27 |只看该作者
要把预取的时间算准,其他的原因就不知道了~

最好预取完了能马上使用,防止cache污染

比如:
如果预取要用 a cycle,如果插入预取指令的地方离它被使用的地方有b cycle 距离,如果是在循环中可以提前a/b个迭代预取

论坛徽章:
0
4 [报告]
发表于 2009-12-22 10:03 |只看该作者
原帖由 heixia108 于 2009-12-21 23:27 发表
要把预取的时间算准,其他的原因就不知道了~

最好预取完了能马上使用,防止cache污染

比如:
如果预取要用 a cycle,如果插入预取指令的地方离它被使用的地方有b cycle 距离,如果是在循环中可以提前a/b ...



那我上面的写法能否把全部的数组预取到cache里?而且预取的时间怎么算,我不是很了解,能不能举个简单点具体点的例子来说明一下,有劳了···

论坛徽章:
0
5 [报告]
发表于 2009-12-22 21:54 |只看该作者
不知道。。。 里面的流水线,乱序,多发射,不知道怎么算~

论坛徽章:
2
摩羯座
日期:2013-10-10 14:29:04天蝎座
日期:2014-01-03 09:14:49
6 [报告]
发表于 2009-12-23 09:25 |只看该作者

回复 #1 RUNONMIPS 的帖子

如果是在循环中使用预取,有时候,预取其实不如直接循环展开的效果更明显。

论坛徽章:
0
7 [报告]
发表于 2009-12-24 09:31 |只看该作者
我的这个数组是个表,很多的操作都要查找这个表,所以想把它预取到cache里以减少cache miss,不知道我这样写能不能把这个数组预取到cache中呢

论坛徽章:
0
8 [报告]
发表于 2009-12-24 22:41 |只看该作者
没用过MIPS,这个还是去问胡教主去吧。

论坛徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:56:11数据库技术版块每日发帖之星
日期:2016-08-03 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
9 [报告]
发表于 2009-12-24 23:09 |只看该作者
有OS吗?运算量很大?

论坛徽章:
0
10 [报告]
发表于 2009-12-25 09:30 |只看该作者

回复 #9 cjaizss 的帖子

有OS。这个表中都是0-255的数,作用是对运算结果进行clip操作

我现在对pref预取整个数组的写法有些疑惑。
1,现在已知一个512大小的char的常量数组a,我要把这个数组预取进来该怎么写呢?是直接写pref 4,0(a)呢,还是按照一个cache line大小(32B)的偏移来写呢,如pref 4,0(a);pref 4,32(a);.....pref 4,480(a)。
2,如果提供一个内存地址 int *ptr,里面也是连续的数据,我要预取这些数据,该怎么写?pref 4,0(ptr)这么写对吗?

1的两种写法我都写过了,后者在效率上要慢一点。大家能帮我先纠正一下写法吗???

[ 本帖最后由 RUNONMIPS 于 2009-12-25 16:32 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP