当前位置:  技术问答>linux和unix

关于代码优化的问题

    来源: 互联网  发布时间:2016-08-12

    本文导语:  昨天优化一个分布式渲染的代码,优化的部分是对每一帧图像进行处理的部分,总共做了两处改动:一是将原来每次在函数中开辟的缓冲区改为全局变量,即只在第一次初始化是开辟好(因为窗口大小不变,所以每帧...

昨天优化一个分布式渲染的代码,优化的部分是对每一帧图像进行处理的部分,总共做了两处改动:一是将原来每次在函数中开辟的缓冲区改为全局变量,即只在第一次初始化是开辟好(因为窗口大小不变,所以每帧图像需要的缓冲大小不变),这样避免了每次函数调用时分配内存空间和释放的时间代价;而是将原来函数中对全局变量的调用全部用局部变量缓冲,比如原来代码是这样:
int a;

void ....(...)
{
//调用a的代码
}
改为:
int a;

void ....(...)
{
int b=a;
//调用b的代码
}

全局变量有大概6,7个左右。
最后效果如下:
优化前帧率:11-12
第一种优化后:11-13
第二种优化后:18-20

我的问题是这种现象是怎么造成的,我原本觉得内存分配和释放是很费时的事,但实际优化后效果不明显;而第二种优化方案是在看一本国外文献时作者在讲他的一个项目是提到的,说是这么做可以提高cache的命中率。请问这个有没有更具体些的解释,或者这方面的知识属于什么范畴,有没有相关的书籍或领域。请教达人指教,鄙人不胜感激。

|
这个涉及到cache的知识。
绝大部分CPU都有一个cache,许多CPU还有二级cache(相对于一级cache,二级cache容量大一些,但是速度慢一些)。如果在访问数据时,数据没有在cache中,则成为cache没有命中(cache miss),这是需要将数据从内存加载到cache中,这个过程非常慢,因此要尽量保证cache的命中。
如果提高cache的命中率呢?

要将频繁访问的数据集中存放:将频繁访问的数据按照顺序保存,而不要使用指针。这样,最常用的数据会尽可能的保存在一级cache中。

顺序访问数据:在cache miss后,包含需要访问数据在内的一段数据会被加载到cache中,如果顺序访问,就可以提高cache的命中。

避免同时遍历多个比较大的数据buffer:多个缓冲区在cache上互相冲突对导致cache miss的概率提高。 

而在本例中,在进入函数的时候,cache里面一般情况下是么没有保存a的值的(因为a是全局的,可能很长时间都没有使用了)。而使用b=a,a依然不會进入cache,但是b会进入cache,这样CPU访问速度会快很多。

    
 
 

您可能感兴趣的文章:

  • sh 里面ftp上传文件的代码。大侠帮忙看看下面的代码有什么问题
  • 用Jbuilder3 遇到问题不能运行把可疑代码注掉后可以运行但是重新使用可疑代码时又可以运行了多次重复都是如此
  • 关于软件或者程序的源代码问题??
  • firefox源代码问题
  • linux 源代码的学习问题
  • 关于源代码的问题
  • 菜鸟问题(源代码)
  • VIM的使用,代码缩进的问题
  • 关于Qt的demo中的控件代码问题
  • 求教:linux下代码编辑问题
  • fedora10 内核代码问题
  • X Window System 的源代码的问题
  • 在制作的留言簿上提交jsp的源代码的问题,
  • 代码实现Radius服务模拟的问题,熟悉Radius服务的大虾请进!
  • 请教一下调试GCC源代码问题
  • cvs 代码维护问题
  • 关于linux内核版本和源代码版本问题
  • 高深问题:有了linux内核源代码如何做成一个linux操作系统
  • 在Jbuilder中编辑代码的问题
  • 谁有“八女王”和“六匹马”问题的源代码,每个50分!!!!
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • javascript 添加到收藏夹和书签代码示例
  • 在JBuilder中,为什么编写的代码中,当代码出现关键字时,后面的部分代码就移位了,当在有关键字的那些代码行进行选择时,也会出现鼠标位
  • Python GUI编程:tkinter实现一个窗口并居中代码
  • 为什么两行代码间不加入其他代码就崩溃,而加入了日志代码后就不崩溃?
  • JSP中清空cookie代码参考
  • 在ubuntu8.10 新立得中安装anjuta,为什么没有代码提示功能,怎么做才有,还有自动代码补全和代码提示有什么区别,
  • Python获取网页编码的方法及示例代码
  • 到底怎么样的代码算是有效代码?请教了。。
  • HTML网页中的html body onload自动跳转方法介绍及自动跳转代码示例
  • 如果要研究源代码以提高自己,哪一个开放源代码的软件比较合适?
  • php通过socket_bind()设置IP地址代码示例
  • linux源代码的时间函数源代码
  • boost库lexical_cast不同用法代码参考
  • gdb的时候代码 next显示的代码乱了
  • 通过javascript库JQuery实现页面跳转功能代码
  • 源代码!源代码!
  • 使用libpcap读取tcpdump抓取的文件并解析c代码实例
  • 哪位会使用代码保护工具WingGuard来保护java代码?
  • HTML网页的Meta Refresh自动跳转方法介绍及Meta Refresh自动跳转代码示例
  • 如何得到C语言代码对应的汇编代码?
  • Linux c++虚函数(virtual function)简单用法示例代码
  • RedHat Linux是开放源代码的吗?如何能看见它的源代码,如何进行修改?


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3