BLAS是否支持稀疏反对称矩阵的矩阵向量乘积运算?
Intel MKL Sparse BLAS 稀疏反对称矩阵向量乘积相关说明
- 标准BLAS、Sparse BLAS官方规范,以及当前正式发行版的Intel MKL Sparse BLAS模块,均未提供专门面向稀疏反对称矩阵的矩阵向量乘积专用函数。现有接口原生支持的稀疏矩阵类型仅覆盖通用矩阵、对称矩阵、三角矩阵、Hermitian矩阵四类,没有单独为反对称矩阵设计的存储格式或运算入口。
- 不需要为了实现该运算存储完整稀疏反对称矩阵,基于现有三角稀疏矩阵运算接口即可实现内存最优的计算效果,无额外内存或性能开销:
反对称矩阵满足核心性质A^T = -A,且所有对角线元素恒为0,仅需存储矩阵上三角(或下三角)区域的非零元素即可,无需存储对称位置的镜像元素,也无需为全零对角线分配存储空间。
以常用运算y = alpha * A * x + beta * y为例,仅需两步调用现有接口即可完成计算:- 基于存储的单三角非零元素创建三角类型稀疏矩阵句柄,调用Sparse BLAS三角矩阵向量乘接口,以非转置模式完成该三角部分的乘加运算,得到单三角区域对结果的贡献
- 保持矩阵句柄和存储数据不变,调用转置模式的三角矩阵向量乘,乘系数取
-alpha,将计算结果累加到第一步得到的结果向量上,最终输出就是完整反对称矩阵的向量乘积结果
- Fortran环境调用MKL时注意:创建稀疏矩阵描述符时,矩阵类型参数传入对应上/下三角矩阵的枚举值,对角线属性直接标记为零对角线即可,不需要额外传入对角线元素数据。
- 该实现方案的内存占用和理论上专用反对称矩阵接口的最优内存占用完全一致,浮点运算量也和专用接口没有差异,不会引入冗余计算。
内容的提问来源于stack exchange,提问作者Edward Yang
相关产品推荐
相关产品推荐

