在我在ubuntu上执行的c ++程序中,我有一个很大的2D dynamic array
(大约25948520)
,我在for循环中访问了两次。
对动态数组的访问是random
我的申请时间至关重要。所以,我希望尽可能减少对2D阵列的访问时间
有没有什么方法可以减少对动态数组的随机访问,因为它很大。 (每个数组元素都存储int,bool,char的向量)
其次,我不必遍历数组,因为我知道确切的索引,我必须找到一定的值。
请建议一些替代方案来完成上述任务?
增加分页内存可以带来更好的性能吗?
答案 0 :(得分:1)
由于您的阵列很大并且您进行随机访问,因此您将(大致)在每次访问时都有一个缓存未命中。除非您在访问之前知道下一个要访问的位置,否则无法避免这种情况。如果这样做,您可以尝试使用例如SSE预取内在函数(void _mm_prefetch (char const* p, int i)
)预取位置。
您可以尝试在大页面上分配数组。这将减少TLB的优势,从而减少TLB未命中。但是,巨大的页面分配支持取决于操作系统。如果你使用的是linux,你可以在这里阅读如何使用大页面分配数组:http://linuxgazette.net/155/krishnakumar.html