将值存储在单独的CPU缓存库中

时间:2012-12-07 23:05:25

标签: caching mips cpu-architecture cpu-cache

作为类项目的一部分,我正在研究如何在CPU架构中提高路径查找算法的性能。该算法在C ++中实现。基本操作是读取x,y坐标并对它们执行一些操作。

我现在的想法是将x和y坐标分别存储在两个缓存库中(设置关联)。为位置输入的两个坐标应存储在不同的库中,以便它能够并行读取它们并对x和y坐标执行单独的操作并存储组合结果。通过使用矢量运算,可以进一步加快此过程,同时读取最多4个坐标和4个y坐标。

例如,为了计算距目标节点的欧氏距离,在每个位置必须读取x和y坐标并从目标坐标中减去以找出距离。

我想知道是否有一种有效的方法(缓存放置策略)将x和y坐标保持在不同的缓存行/块中以利用并行性。我可以用它来实现坐标的任何操作/编码吗?

P.S:我不是在寻找软件优化,而是在修改缓存设计(理论上)以加速算法。

参考:这个blog post提到“如果L1缓存从不同的银行访问缓存行,则可以并行处理两个访问,如果它们属于同一个银行,则可以串行处理。”

1 个答案:

答案 0 :(得分:0)

在这样的结构中保存的坐标:

struct {
  int x;
  int y;
} coordinate; 

将适合单个缓存行。事实上,在具有32字节高速缓存行的典型MIPS处理器上,8个coordinate实例将适合高速缓存行。 CPU将从单个存储区或数据高速缓存中的方式一次读取整行,并且所有32个字节或全部4个坐标将在32字节填充/存储中可用缓冲区(FSB)到管道的零延迟。带缓存的MIPS处理器通常具有多个FSB。

具有分组或组关联缓存的MIPS处理器通常使用LRU算法来选择在缓存未命中时将新数据放入哪个库/路。通常不可能确保来自特定位置的数据总是被放置在高速缓存中的特定方式中。

所有这一切都是因为FSB对天真方案的积极影响以及由于<不可预测的em> way 缓存的选择算法。