免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123下一页
最近访问板块 发新帖
查看: 5483 | 回复: 22

在stack上分配大块内存,是否会影响效率? [复制链接]

论坛徽章:
0
发表于 2012-06-20 12:38 |显示全部楼层

比如在函数里面,声明一个1MB大小的buffer,会影响cpu缓存的命中率吗?

void test(char* data)
{
  char buf[1024][1024];
  //then do something with 'data' and 'buf'

}

如果buf只声明而基本不使用,会影响cpu缓存吗?

论坛徽章:
2
CU十二周年纪念徽章
日期:2013-10-24 15:41:34处女座
日期:2013-12-27 22:22:41
发表于 2012-06-20 14:06 |显示全部楼层
操作系统的某些部分需要考虑对cache的影响;我听说某些库可以让用户根据cache的不同而设定不同参数。不过一般情况下,编程考虑cache,那是装B大了。

论坛徽章:
324
射手座
日期:2013-08-23 12:04:38射手座
日期:2013-08-23 16:18:12未羊
日期:2013-08-30 14:33:15水瓶座
日期:2013-09-02 16:44:31摩羯座
日期:2013-09-25 09:33:52双子座
日期:2013-09-26 12:21:10金牛座
日期:2013-10-14 09:08:49申猴
日期:2013-10-16 13:09:43子鼠
日期:2013-10-17 23:23:19射手座
日期:2013-10-18 13:00:27金牛座
日期:2013-10-18 15:47:57午马
日期:2013-10-18 21:43:38
发表于 2012-06-20 14:32 |显示全部楼层
不说Cache,据说RICS芯片对近、远的地址采用不同的指令,会有影响

论坛徽章:
14
水瓶座
日期:2014-06-10 09:51:0215-16赛季CBA联赛之江苏
日期:2017-11-27 11:42:3515-16赛季CBA联赛之八一
日期:2017-04-12 14:26:2815-16赛季CBA联赛之吉林
日期:2016-08-20 10:43:1215-16赛季CBA联赛之广夏
日期:2016-06-23 09:53:58程序设计版块每日发帖之星
日期:2016-02-11 06:20:00程序设计版块每日发帖之星
日期:2016-02-09 06:20:0015-16赛季CBA联赛之上海
日期:2015-12-25 16:40:3515-16赛季CBA联赛之广夏
日期:2015-12-22 09:39:36程序设计版块每日发帖之星
日期:2015-08-24 06:20:002015亚冠之德黑兰石油
日期:2015-08-07 09:57:302015年辞旧岁徽章
日期:2015-03-03 16:54:15
发表于 2012-06-20 14:48 |显示全部楼层
反汇编看看么?{:3_189:}

如果基本不使用,编译器加入了优化,会不会该变量都不存在了呢

论坛徽章:
59
2015年亚洲杯之约旦
日期:2015-01-27 21:27:392015年亚洲杯之日本
日期:2015-02-06 22:09:41拜羊年徽章
日期:2015-03-03 16:15:432015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015元宵节徽章
日期:2015-03-06 15:50:392015年亚洲杯之阿联酋
日期:2015-03-19 17:39:302015年亚洲杯之中国
日期:2015-03-23 18:52:23巳蛇
日期:2014-12-14 22:44:03双子座
日期:2014-12-10 21:39:16处女座
日期:2014-12-02 08:03:17天蝎座
日期:2014-07-21 19:08:47
发表于 2012-06-20 15:13 |显示全部楼层
回复 1# wwwsq


    no , in any case , if the memory is "allocated" in stack (actually it was not be allocated at all, because of that the prg stack is in here, wherever you access it or not).

of course if you access the memory , then some effective may be maked.good luck.

论坛徽章:
0
发表于 2012-06-20 16:22 |显示全部楼层
folklore 发表于 2012-06-20 15:13
回复 1# wwwsq


thanks.

如果我对buf[1024][1024]进行跳跃式的读写,比如memcpy(buf[0], data, 10); memcpy(buf[1], data+10, 10); memcpy(buf[2], data+20, 10);
这种方式会不会因为prefetch而导致cpu cache被flush?

换句话,二维数组是否是cpu cache friendly的?

论坛徽章:
4
戌狗
日期:2013-08-15 18:22:43技术图书徽章
日期:2013-08-21 13:48:45巨蟹座
日期:2013-09-26 17:06:39处女座
日期:2013-12-25 11:26:10
发表于 2012-06-20 16:53 |显示全部楼层
wwwsq 发表于 2012-06-20 16:22
thanks.

这种方式会不会因为prefetch而导致cpu cache被flush?

换句话,二维数组是否是cpu cache friendly的?...



这个问题是不是应该这样考虑,我们的结论是认为1维数组cpu cache friendly的说法不成立


反证假设 : 1维数组cpu cache friendly

则今有归纳法假设:N维数组cpu cache friendly
又有N+1维数组可看作元素为N维数组的1维数组,今由反证假设“1维数组cpu cache friendly",又有归纳法假设“N维数组cpu cache friendly",则得结论:有限维数组全部cpu cache friendly。

因有限维数组全部cpu cache friendly不成立,故1维数组cpu cache friendly的说法不成立?????????????

论坛徽章:
0
发表于 2012-06-20 17:03 |显示全部楼层
回复 7# 塑料袋
结论和开始的1维数组not cache friendly 矛盾,证明1维是cache friendly.

   

论坛徽章:
4
戌狗
日期:2013-08-15 18:22:43技术图书徽章
日期:2013-08-21 13:48:45巨蟹座
日期:2013-09-26 17:06:39处女座
日期:2013-12-25 11:26:10
发表于 2012-06-20 17:07 |显示全部楼层
除了依据体系结构精心设计过的程序外,没有任何玩意是cache friendly的。

一般就是时间空间的局部性,
还不行的话就根据cache的set和way,使用cache coloring的办法
还不行的话只有使用硬件提供的紧密耦合存储器

论坛徽章:
2
CU大牛徽章
日期:2013-04-17 11:46:28CU大牛徽章
日期:2013-04-17 11:46:39
发表于 2012-06-20 17:07 |显示全部楼层
我在山脚下挖个水塘,会否影响到太平洋的水位下降?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP