分布式内存中使用紧凑存储的Cholesky分解三种算法
1. 引言
在分布式内存环境中实现的密集线性代数例程通常采用二维块循环布局(BCL),ScaLAPACK库就是一个使用BCL的例子。BCL能为许多算法提供有效的负载平衡,但它并不规定矩阵元素在每个处理器上的存储方式。ScaLAPACK库将每个基本块存储为列主序二维数组(标准Fortran数组)的子矩阵,另一种方法是连续存储每个基本块,例如作为列主序块二维数组。
连续存储基本块有以下优点:
- 能很好地映射到L1缓存,涉及这些块的三级操作往往能实现高性能并减少内存流量。
- 移动一个块可以通过一次连续的内存传输完成。
本文使用方形基本块(SB)来存储局部矩阵,并仅存储块矩阵的三角部分,以实现对称矩阵的最小块存储,这种格式称为方形块紧凑(SBP)格式。
同时,我们发现像ScaLAPACK中Cholesky分解例程(PDPOTRF)这样的直接数据并行实现存在效率低下的问题,因此开发了一种迭代重叠的数据并行实现,减少了空闲时间,从而缩短了执行时间。
2. 串行环境中的近最小存储
2.1 矩形全紧凑(RFP)格式
RFP是一种用于存储三角或对称矩阵的格式,它有多种不同形式。以下图为例,一个下三角矩阵被划分为两个子矩阵A和B,三角矩阵$B^T$与A沿对角线合并,新矩阵可以作为标准全格式矩形数组存储,没有内存浪费。
graph LR
classDef process fill:#E5F6FF,stroke:#73A6FF,stroke-wid
超级会员免费看
订阅专栏 解锁全文
1778

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



