首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用于缓存优化的编程语言构造?

用于缓存优化的编程语言构造?
EN

Software Engineering用户
提问于 2010-12-05 05:14:14
回答 2查看 484关注 0票数 7

显然,优化缓存使用肯定会提高我的程序效率。令人惊讶的是,我没有看到有太多的编程语言实际上具有这样的特性。所以我的问题是:

  1. 您看到了哪些有助于提高缓存使用的语言结构?
  2. 如何在缓存使用方面进行创新,因为大多数系统都不会轻易地显示它们的L1缓存大小?(Windows在Linux上确实有API或/proc/cpuinfo,但我正在为中间开发人员寻找更简单的东西)
EN

回答 2

Software Engineering用户

发布于 2010-12-05 08:33:52

这只是一份不合算的名单。

概念

  • 空间局部性
  • 时间局部性
  • 易于预测的内存访问模式。
    • 例如,按顺序读取/写入兆字节的数据一点也不低效,因为CPU可以预测下一个地址并自动提前读取。

编程语言构造

  • 数据对齐指令。
  • 结构和结构之间的切换。
  • 高性能库提供的矢量化数据容器。

编译器已经为您完成了一些工作。例如,密切相关的函数组(例如,可能在连续的序列中调用)将被编译成二进制指令,然后彼此存储在一起,以便它们驻留在相同的4KB页面块中。发展商根本没有办法手动处理这些细节。

对于本机编译语言,局部变量存储在堆栈上,最接近当前堆栈位置的区域可能被缓存。如果从堆栈中分配了一个大变量(几个KBs或更多的变量),CPU可能不得不从缓存中排除其他东西以腾出空间。另一方面,如果非常频繁地使用大型变量,则可以对堆栈进行分配。

票数 4
EN

Software Engineering用户

发布于 2010-12-05 05:29:02

这里没有琐碎的答案。在多处理系统(即任何现代操作系统)中,您不能对虚拟内存的状态做很多假设。不过,您可以对数据结构进行一些一般性的观察。散列技术可能允许您在数据和存储之间开发更可靠的关联,而树之类的数据结构则倾向于使用降低caching...BUT有效性的偏移,将所有这些都与一个巨大的caveat...profiling结合起来--一种技术相对于另一种技术的好处将是极其困难的,并且对您自己的体系结构和内存层次结构具有特定的好处。

这里的最短答案是对于“中间开发人员”,您最好使用经过良好测试的库,这些库清楚地说明了性能界限,并且对内存消耗模式有很好的理解。试图优化特定硬件平台上的缓存,对于最困难的问题来说,似乎是痛苦的最后手段。

票数 0
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/23838

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档