相关疑难解决方法(0)

如何编写最能利用CPU缓存来提高性能的代码?

这听起来像是一个主观问题,但我正在寻找的是特定的实例,你可能遇到过与此相关的问题.

  1. 如何制作代码,缓存有效/缓存友好(更多缓存命中,尽可能少的缓存未命中)?从两个角度来看,数据缓存和程序缓存(指令缓存),即一个代码中与数据结构和代码结构相关的内容,应该由一个人来处理,使其缓存有效.

  2. 是否有必须使用/避免的特定数据结构,或者是否有特定方式来访问该结构的成员等...以使代码缓存有效.

  3. 是否存在任何程序结构(if,for,switch,break,goto,...),代码流(对于if内部,如果在for之内等等),应该遵循/避免这个问题?

我期待听到有关制作缓存高效代码的个人经验.它可以是任何编程语言(C,C++,汇编,...),任何硬件目标(ARM,Intel,PowerPC,...),任何操作系统(Windows,Linux,S ymbian,...)等. .

这种变化将有助于更好地理解它.

performance caching cpu-cache

155
推荐指数
10
解决办法
6万
查看次数

我可以在Java代码中做些什么来优化CPU缓存?

编写Java程序时,是否会影响CPU如何利用其缓存来存储数据?例如,如果我有一个被大量访问的数组,如果它足够小以适应一个缓存行(通常是64位机器上的128个字节),它会有帮助吗?如果我将一个使用频繁的对象保持在该限制内,我可以期待它的成员使用的内存靠近并保持缓存吗?

背景:我正在构建一个压缩的数字树,它受到了C中的Judy数组的启发.虽然我主要使用节点压缩技术,但Judy将CPU缓存优化作为中心设计目标,节点类型为以及在它们之间切换的启发式方法受到很大影响.我想知道我是否有机会获得这些好处?

编辑:到目前为止答案的一般建议是,当你离开机器时,不要试图微观优化机器级细节,就像你在Java中一样.我完全同意,所以觉得我必须添加一些(希望)澄清的评论,以更好地解释为什么我认为这个问题仍然有意义.这些如下:

有些东西通常更容易被计算机处理,因为它们的构建方式.我已经看到Java代码在压缩数据(来自内存)上的运行速度明显更快,即使解压缩必须使用额外的CPU周期.如果数据存储在磁盘上,很明显为什么会这样,但当然在RAM中它的原理是相同的.

现在,计算机科学有很多东西可以说这些东西是什么,例如,C语言中的引用位置很好,我想它在Java中仍然很好,甚至可能更好,如果它有助于优化运行时做更聪明的事情.但是你如何实现它可能会有很大的不同.在C中,我可能编写代码来管理更大的内存块本身,并使用相邻的指针来获取相关数据.

在Java中,我不能(并且不想)了解特定运行时将如何管理内存.因此,我必须对更高级别的抽象进行优化.我的问题基本上是,我该怎么做?对于引用的局部性,"在一起"是什么意思在我在Java中工作的抽象层次?相同的对象?相同的类型?相同的阵列?

总的来说,我不认为抽象层会改变"物理定律",比喻说.即使你不再调用malloc(),每次空间不足时,你的数组大小加倍也是一个很好的策略.

java optimization caching

47
推荐指数
4
解决办法
1万
查看次数

标签 统计

caching ×2

cpu-cache ×1

java ×1

optimization ×1

performance ×1