【发布时间】:2017-01-05 17:47:40
【问题描述】:
我正在进行科学计算,需要存储粒子的速度。要存储 3 个组件,我应该使用 3 个不同的数组还是单个 1x3 数组?它会以任何方式影响我的计算吗?
我的粒子数量会很大,甚至可能达到 1e10 或更多。我将使用 C++。
【问题讨论】:
-
这在很大程度上取决于您访问数据的方式。由于缓存等因素,有不同的算法可以从中受益。
-
你的标题是 NxM,但你的身体是 1x3。为什么要使用 1x3 数组?您是说体内的 Nx3 吗?
-
这是古老的 Array-Of-Structures 与 Structure-Of-Arrays 问题的一个特例。正如@twalberg 所说,这仅取决于您的数组访问权限。如果您将比其他维度更多地沿着一个维度进行操作 - 所有(例如)速度的 x 分量在一起,与每个粒子的速度的所有分量相比 - 将这些数据保持在一起是有意义的。但请注意,在这里您可以通过将数组排序为(例如)
double vel[NPTS][NDIMS]与double vel[NDIMS][NPTS]来获得这种好处 - 实际上单独的数组vx[NPTS], vy[NPTS], vz[NPTS]会很痛苦。
标签: c++ arrays performance multidimensional-array scientific-computing