作为我正在使用的算法的新变体的一部分(倾向于使用SMP ),我正在考虑将我的particle排序到boxes中,让每个box都有一个particle* []。我唯一担心的是,由于每个盒子的粒子数量可能不同(已知平均10个粒子在极少数情况下高达70个),我将需要大量过度分配指针数组。我想可能会有5-10%的使用率。
极端情况下会有大约一百万个这样的内存,所以我们正在考虑分配半GB的内存。就运行它的机器而言,这不是问题,但我想知道是否存在与跨距内存相关的性能损失(缓存讨厌它或其他什么)。(例如,访问500个字节中的前60个字节)。我知道要确保我的步幅宽度最终不会是64的缓存破坏倍数…
我可以接受它在极少数情况下失败,只要这个计划为我带来了足够的性能提升,使我能够在相同的时间内运行更多的成功副本。
如果相关,这段代码将主要在至强E5620上运行,尽管这种情况将会改变,我不希望做任何特定于体系结构的事情。
编辑:这是将连续内存中N字节的打包数据与跨更大的连续内存区域均匀分布的N字节数据进行比较。
发布于 2012-07-17 01:59:52
如果您分配的内存不会导致交换,那么简单地分配它不会导致任何额外的开销。
然而,如果您的算法当前将数据点打包到连续内存中,并且您的新算法将5%-10%的利用率分布在整个分配的缓冲区中(从您的问题中不清楚是否是这样),那么您将有相当多的缓存未命中访问内存。
另一方面,如果每个CPU有一个缓冲区(并且使用连续的内存),由于减少了false sharing的机会,您的算法可能会执行得更好。
https://stackoverflow.com/questions/11509824
复制相似问题