0

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

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

4

3 回答 3

1

这真的取决于想要做什么。如果您一次使用一条路径(即进行某种蒙特卡洛),那么最好的方法是生成一条路径,然后在您沿其获取数据后将其丢弃。如果不是,那么,假设您的路径空间不适合内存,我将以合理有效的格式生成并保存所有路径以便快速访问,然后mmap是文件。

于 2013-10-23T18:48:09.513 回答
1

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

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

您可以通过使用位字段和一些特定于编译器的属性来缩小每个字段来压缩大小,以指定struct 的整体大小

于 2013-10-23T18:53:59.697 回答
0

如果您关心的是性能,那么问题是您的缓存是否喜欢数据布局。您逐行遍历的大型数组通常很好(数据一次加载到缓存中,可能通过预取、处理和写回/从缓存中逐出)。如果您使用的数组数量多于 CPU 无法识别的数量,那么唯一可能存在的问题就是预取效率低下。

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

因此,最好继续使用这种单独的数组方法。

于 2013-10-23T18:58:14.727 回答