我有一个我正在尝试解决的问题,它涉及一个 7 点计算模板。对于那些可能不知道的人,这将是一个 3D 网格,这 7 个点是第 n 个点,相邻点在 x、y 和 z 方向上各一个点,正负(或东边的邻居) /west/north/south 和上/下)。
所以这 6 个点加上我正在处理的 1 个附加点用于计算,并且都存储在一个一维数组中。
假设 nx 是立方体的宽度,ny 是高度。那么,在内存中,当我访问数组 All_Points 中的一个点时,例如 All_points[n],那么要获取它在每个方向上的邻居,我也想访问 All_points[n-1]、All_points[n+1] 、All_points[n-nx]、All_points[n+nx]、All_points[n-nx ny] 和 All_points[n+nx ny]。
所以我的问题是我得到了大量的缓存未命中。我似乎找不到任何代码示例来演示如何避免这个问题。理想情况下,我想将此数组拆分回它的 x、y 和 z 坐标,例如 All_x_points[] 但后来我在尝试保持更新时遇到了问题,因为 All_points[n] 发生了变化,当它发生变化时,这意味着对于其他一些 All_points[n'] 我的 x、y 或 z 值将需要用它来更新。
以前有人见过这种事情吗?