[英]Which is the fastest? A boost::multi_array or a std::vector?
哪个最快? 一个boost::multi_array
或std::vector
? 我将以3维存储(不是恒定的)17.179.869元素,这些元素需要非常快速且经常地在for
循环内进行访问。 表现最好的是什么? 一个std::vector
或boost::multi_array
?
(我不希望它能在一秒钟内完成,但我想使其尽可能高效,因为纳秒级的差异可以节省大量时间。)
最好的建议是自己进行基准测试。
无论如何,由于您似乎具有恒定的大小,因此还有其他解决方案:
int data[X][Y][Z]
) X*W*H + Y*W + Z
,在某些情况下会很方便 std::array
,基本上是一个C ++数组,带有一些STL集合中的合规性糖 std::vector
,我猜这是可以尝试的第一个解决方案 boost::multi_array
,它旨在支持N维数组,因此出于您的目的可能有些过分,但与矢量相比,它的数据局部性更好。 这些库向量类被设计为易于使用且相对故障安全。 它们的速度与设计中的速度一样快,但是您自己做不到(除了手工编码的组件)。 对于您正在谈论的大小(2e10个元素),我将更关注效率而不是用户友好性。 如果最内层的循环每个元素只进行很少的计算,则将发现索引计算占主导地位,这建议您进行一些展开和指针步进操作。 ( 也许您可以指望编译器进行一些展开,但是我不在乎。)
唯一可以确定的方法是同时尝试和分析代码。 但是,作为一堆想法,这就是我想您会发现的。
在一天结束时,尝试一下看看
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.