密集线性代数因式分解的最小数据复制
在密集线性代数因式分解(DLAFA)领域,数据结构和算法的选择对性能有着至关重要的影响。传统的标准数据结构在某些情况下可能会导致性能下降,而新的数据格式如方形块(SB)和方形块打包(SBP)格式则展现出了巨大的潜力。本文将深入探讨这些新格式的特点、优势以及如何实现最小数据复制,从而提高DLAFA的性能。
1. 连续方形块的重新排序需求
在DLAFA中,非密集存储(NDS)将矩阵A表示为一组阶数为NB的方形块(SB)的集合,每个SB在内存中是连续的。研究表明,连续的内存块能最佳地映射到L1缓存,减少L1和L2缓存缺失以及TLB缺失,从而提高矩阵乘法和其他常见行列矩阵操作的性能。
然而,在某些处理器上,浮点多重加载和存储指令要求操作数在内存中连续,多重浮点操作也要求寄存器操作数连续。因此,进入L1的数据可能需要正确排序,以便以最优方式进入L0。标准的行/列主序布局可能不再是最优选择。在某些情况下,将SB重新排序为子矩阵(称为寄存器块)可以产生新的数据布局,既能在L1中保持连续,又能以最优方式从L1加载到L0。寄存器块的顺序和大小取决于平台。
2. 基于划分为寄存器块的方形块格式的DGEMM内核
寄存器块是SB的子矩阵,这一特性使得在Fortran和C语言中可以方便地对这些块进行寻址。假设我们有三个SB:A、B和C,要对它们应用DGEMM。我们将A、B和C划分为可兼容的子矩阵,这些子矩阵也是寄存器块,其大小分别为kb × mb、kb × nb和mb × nb。因此,AT、B和C分别被划分为大小为k1 × m1、k1 × n1和m1 × n1的分区矩阵。
我们要计算的DGEMM内核是C =
超级会员免费看
订阅专栏 解锁全文
2045

被折叠的 条评论
为什么被折叠?



