矩阵运算中的非规范数组布局与性能优化
1. 矩阵存储与规范布局
在计算机语言中,矩阵表示是将多维矩阵存储在内存中的方法。Fortran采用“列主序”,即给定列的所有元素在内存中连续存储;而C使用“行主序”,给定行的所有元素连续存储。这两种方案被视为规范存储,但编程中默认的列/行主序限制了数据的局部性,仅在单一维度上有效。
随着处理器速度相对内存速度的不断提升,对于处理大型矩阵的算法而言,局部性优化成为显著的性能问题。为了尽可能有效地在缓存中重用数据,需要充分利用局部性,减少低关联性缓存中的冲突。为此,人们进行了大量研究,采用了诸如缓存分块或平铺、预复制和填充等传统技术,同时也提出了替代存储格式来解决局部性问题。
2. 非规范数组布局的研究
在串行密集代码中,非规范数组布局的研究主要集中在以下几个方面:
- 子矩阵存储 :为减少分页内存系统中的页面错误,有人提出将矩阵划分为方形子矩阵,每页保存一个子矩阵,从而显著减少常见矩阵操作中的页面错误数量。
- 递归布局 :在过去十年中,递归性被引入线性代数代码。块递归代码适合在具有深层内存层次结构的机器上执行,但部分块递归算法与TLB的交互效果不佳,因此催生了新的存储格式。
- 不同命名的数据布局 :一种矩阵按子矩阵存储,子矩阵再按列存储的数据布局,不同作者有不同命名,如子矩阵存储、BC、SB、4D、BDL和TDL等,本文统一称为SB(方形块格式)。
- 四叉树和空间填充曲线(SFC) :一些研究聚焦于四叉树或SFC在串行密集代
超级会员免费看
订阅专栏 解锁全文
1293

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



