作为我正在使用的算法的新变体的一部分(倾向于使用 SMP),我正在考虑将我particle
的 s 排序为box
es,让每个box
人都有一个particle* []
. 我唯一担心的是,由于每个盒子的粒子数量可能会有所不同(在极少数情况下,平均 10 个会高达 70 个),我需要大量过度分配指针数组。我在想大概是 5-10% 的利用率。
极端情况下大约有一百万个,所以我们正在考虑分配半 GB 的内存。就它将运行的机器而言,这不是问题,但我想知道是否存在与跨步内存相关的性能损失(缓存讨厌它或其他东西)。(例如,访问 500 个字节中的前 60 个左右的字节)。我确实知道要确保我的步幅宽度最终不会成为 64 的缓存破坏倍数......
我可以在非常罕见的情况下让它失败,只要这个计划能让我获得足够的性能提升,以便能够在相同的时间内运行更多成功的副本。
如果相关,这段代码将主要在 Xeon E5620 上运行,尽管这会改变,我宁愿不做任何特定于架构的事情。
编辑:这是将连续内存中的 N 字节打包数据与均匀跨过更大的连续内存区域的 N 字节数据进行比较。