STL容器速度与阵列相比

Chr*_*ris 4 c++ arrays performance stl hpc

我刚刚开始研究速度真正重要的科学项目(HPC).我目前正在设计数据结构.该项目的核心是双值的3D网格,以求解偏微分方程.

由于这里的速度可能比代码的简单性更大,我想知道STL与通常的C风格数组相比如何执行.在我的例子中,因为它是一个3D网格,我想到了a)带有线性索引的一维向量b)3个向量的向量或c)一维c样式数组或d)三维c样式阵列.

我查找了较旧的问题,但我只发现了构建/破坏的问题(这里不重要,因为数据结构只在程序启动时创建一次 - 快速索引和计算很重要)或不同STL容器的比较.

感谢帮助

Jam*_*nze 7

事先很难(甚至不可能)说出相对表现会是什么.通常,在现代机器上,使用平面矢量并计算其中的索引,将优于矢量矢量矢量; 在旧机器上,情况恰恰相反.(在现代机器上,由于局部性差,乘法通常比页面丢失更便宜.在旧机器上,乘法很昂贵,并且没有缓存,因此局部性没有区别.)

此外,根据机器和库实现,使用std::vectorfor this flat vector可能比使用指向内存的简单指针更昂贵(或者它可能不是 - 你事先无法知道).我仍然首先使用向量,在控制类中仔细包装所有内容,如果仍然存在性能问题,请切换到指针.