在C ++中使用大型数组

时间:2013-10-23 18:44:00

标签: c++ arrays

我目前正在学习以前学生的代码(用Java编写并将其更改为我更熟悉的C ++),并且正在寻找需要改进的地方。

基本问题是我们正在模拟大量的随机轨迹,将结果存储在数组中。在他目前的代码中,有3000个轨迹,每个轨迹有20000个步,因此他使用300 x 20000阵列来存储位置,速度(以及许多其他系统属性)。数组是从其他数组中的其他值生成的(例如,温度[0] [j]取决于位置[0] [j]。我知道代码总是需要一段时间才能运行,但我不确定如果这是最有效的方式。

3 个答案:

答案 0 :(得分:1)

这实际上取决于你想要做什么。如果你一次只使用一条路径(即做某种蒙特卡罗),那么最好的方法是生成一条路径,然后一旦获得数据就丢弃它。如果没有,那么,假设您的路径空间不适合内存,我会以合理有效的格式生成并保存所有路径以便快速访问,然后mmap文件。

答案 1 :(得分:1)

为了您的理智,我会为每个实体考虑大量的结构/类。 IE:

 struct Entity {
    int position_x;
    int position_y;
    int temperature;
 };

您可以使用bit fields缩小每个字段以及一些特定于编译器的属性来缩小规模,以指定整体size of the struct

答案 2 :(得分:0)

如果您关心的是性能问题,那么问题就在于您的缓存是否与数据布局相似。逐行逐行的大型数组通常很好(数据一次加载到缓存中,可能是通过预取,处理,写回/从缓存中逐出)。唯一可能存在问题的是如果你使用的数组比CPU能识别的更多,那么预取效率会很低。

将相关值放入结构并构建大量这些结构也很好 iff all 该结构中的数据用于每次通过数组 。如果您不使用此内存布局中的所有数据,处理器从内存中加载不必要的数据并减慢速度。

因此,最好坚持使用单独的阵列方法。