作为课堂项目的一部分,我正在寻找提高 CPU 架构中寻路算法性能的方法。该算法是用 C++ 实现的。基本操作是读取 x,y 坐标并对它们执行一些操作。
我现在的想法是将 x 和 y 坐标分别存储在两个缓存组中(设置关联)。为一个位置输入的两个坐标应存储在不同的存储库中,以便能够并行读取它们,并对 x 和 y 坐标进行单独操作并存储组合结果。通过使用矢量运算,该过程可以进一步加快,同时读取多达 4 个 x 坐标和 4 个 y 坐标。
例如,为了计算到目标节点的欧几里得距离,必须在每个位置读取 x 和 y 坐标并从目标坐标中减去以找出距离。
我想知道是否有一种有效的方法(缓存放置策略)将 x 和 y 坐标保持在不同的缓存行/块中以利用并行性。是否有任何坐标操作/编码可以用来实现它?
PS:我不是在寻找软件优化,而是在寻找修改后的缓存设计(理论上)来加速算法。
参考:这篇博文提到“如果 L1 缓存访问来自不同 bank 的缓存行,则它们可以并行处理两个访问,如果它们属于同一个 bank,则可以串行处理。”