并行累积

概念

并行累积使用多个独立的累积变量来打破单条关键路径的限制,充分利用处理器的能力。

2×2 展开

2 路展开 × 2 路并行 = 2×2 展开:

data_t acc0 = IDENT, acc1 = IDENT;
for (i = 0; i < limit; i += 2) {
    acc0 = acc0 OP data[i];
    acc1 = acc1 OP data[i+1];
}
// 合并 acc0 和 acc1

性能突破

  • 2×2 展开有两条独立的关键路径
  • 每条路径长度是原来的 1/2
  • 理论上 CPE 可降低 50%
  • 配合 进一步提升

L×K 展开

L×K 展开 = L 路循环展开 + K 路并行累积:

  • K 个累积变量打破延迟界限
  • 展开因子 L 提升空间局部性、减少循环开销
  • 理想情况下的 CPE → 吞吐量界限

注意事项

  • 需要足够多的寄存器来存放累积变量
  • 寄存器溢出会降低性能
  • 展开因子需平衡代码膨胀

相关笔记:

链接到