核心思路:1)通过轻工作量的预处理阶段,把矩阵A纵向从上到下分割成一个个的row-slice,划分后每个row-slice中的非零元个数大致相同。每个row-slice由一个CPE单独计算。
2)计算一个row-slice时,读取相应的x时使用动态前向规划技术避免取到无用的x,降低了带宽。
3)对CPE进行划分,同组CPE可以共享所需要的x,可进一步降低带宽。
4)设计了parameter auto-tuning框架(我理解就是测试套件),使得算法更适用于不同的矩阵。
5)运行时采用atomic-operation based work-sharing pool确保负载平衡,这项主要配合1)
下面是详细说明:
1)预处理阶段
MPE确定每个row-slice最多包含多少行、最多有多少个非零元后,对矩阵A进行一次遍历,遍历后的划分出的每个row-slice包含非零元个数大致相同。另外,row-slice中同一行的元素也是分批读取的。
2)如何避免取到无用的x