2D阵列的性能改进

时间:2014-06-23 14:23:03

标签: c++ arrays paging

在我在ubuntu上执行的c ++程序中,我有一个很大的2D dynamic array(大约25948520),我在for循环中访问了两次。 对动态数组的访问是random 我的申请时间至关重要。所以,我希望尽可能减少对2D阵列的访问时间 有没有什么方法可以减少对动态数组的随机访问,因为它很大。 (每个数组元素都存储int,bool,char的向量) 其次,我不必遍历数组,因为我知道确切的索引,我必须找到一定的值。

请建议一些替代方案来完成上述任务?

增加分页内存可以带来更好的性能吗?

1 个答案:

答案 0 :(得分:1)

由于您的阵列很大并且您进行随机访问,因此您将(大致)在每次访问时都有一个缓存未命中。除非您在访问之前知道下一个要访问的位置,否则无法避免这种情况。如果这样做,您可以尝试使用例如SSE预取内在函数(void _mm_prefetch (char const* p, int i))预取位置。

您可以尝试在大页面上分配数组。这将减少TLB的优势,从而减少TLB未命中。但是,巨大的页面分配支持取决于操作系统。如果你使用的是linux,你可以在这里阅读如何使用大页面分配数组:http://linuxgazette.net/155/krishnakumar.html