0

作为我正在使用的算法的新变体的一部分(倾向于使用 SMP),我正在考虑将我particle的 s 排序为boxes,让每个box人都有一个particle* []. 我唯一担心的是,由于每个盒子的粒子数量可能会有所不同(在极少数情况下,平均 10 个会高达 70 个),我需要大量过度分配指针数组。我在想大概是 5-10% 的利用率。

极端情况下大约有一百万个,所以我们正在考虑分配半 GB 的内存。就它将运行的机器而言,这不是问题,但我想知道是否存在与跨步内存相关的性能损失(缓存讨厌它或其他东西)。(例如,访问 500 个字节中的前 60 个左右的字节)。我确实知道要确保我的步幅宽度最终不会成为 64 的缓存破坏倍数......

我可以在非常罕见的情况下让它失败,只要这个计划能让我获得足够的性能提升,以便能够在相同的时间内运行更多成功的副本。

如果相关,这段代码将主要在 Xeon E5620 上运行,尽管这会改变,我宁愿不做任何特定于架构的事情。

编辑:这是将连续内存中的 N 字节打包数据与均匀跨过更大的连续内存区域的 N 字节数据进行比较。

4

1 回答 1

5

如果您分配的内存不会导致交换,那么简单地分配它不会导致任何额外的开销。

但是,如果您的算法当前将数据点打包到连续的内存中,并且您的新算法将 5%-10% 的利用率分布在整个分配的缓冲区中(如果是这种情况,您的问题不清楚),您将有更多的缓存未命中访问内存。

另一方面,如果每个 CPU 有一个缓冲区(并且使用连续内存),由于减少了错误共享的机会,您的算法可能会执行得更好。

于 2012-07-16T17:59:51.843 回答