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