Matrix Multiplication

  1. GEMM(General Matrix Multiplication)-通用矩阵乘
  2. BLAS (Basic Linear Algebra Subprograms) - 基本线性代数子程序
  3. SGEMM (Single precision General Matrix Multiply) - 单精度矩阵乘法
  4. DGEMM (Double precision General Matrix Multiply) - 双精度矩阵乘法
  5. CGEMM (Complex single precision General Matrix Multiply) - 单精度复数矩阵乘法
  6. ZGEMM (Complex double precision General Matrix Multiply) - 双精度复数矩阵乘法

Matrix & Vector

  • GeMV

    稠密矩阵 $\times$ 稠密向量

  • SpMV (Sparse Matrix-Vector multiplication)

    稀疏矩阵 $\times$ 稠密向量

  • SpMSpV(Sparse Matrix-Sparse Vector multiplication)

    稀疏矩阵 $\times$ 稀疏向量

Matrix & Matrix

  • GeMM

    稠密矩阵 $\times$ 稠密矩阵

  • SpMM (Sparse Matrix-Matrix multiplication)

    稀疏矩阵 $\times$ 稠密矩阵

  • SpMSpM (Sparse Matrix Sparse Matrix multiplication)

    稀疏矩阵 $\times$ 稀疏矩阵

  • SpGEMM (Sparse Generalized Matrix-Matrix multiplication)

    稀疏矩阵 $\times$ 稀疏矩阵

    相较于 SpMSpM,这里的 Generalized 表示该操作不仅限于常规数值乘法和加法,还可以自定义其他运算形式,覆盖更广泛的应用场景

  • SDDMM (Sampled-Dense-Dense Matrix Multiplication)

    稠密矩阵 $\times$ 稠密矩阵,最后经过一个稀疏矩阵的采样

    https://cdn.jsdelivr.net/gh/gaohongy/cloudImages@master/202406221053265.png

Sparse Matrix Store Structure1

  1. CSR (Compressed Sparse Row) - 压缩稀疏行2
  1. CSC (Compressed Sparse Column) - 压缩稀疏列
  2. COO (Coordinate Format, also known as “ijv” or “triplet”) - 坐标格式
  3. BSR (Block Compressed Sparse Row) - 块压缩稀疏行
  4. ELL (Ellpack/Itpack format) - ELL压缩格式
  5. DIA (Diagonal storage format) - 对角线存储格式
  6. DOK (Dictionary of Keys) - 键字典格式

从 CSR 到 BSR,是对数据进行了分块,同时单位从每一个点转变为了每一块(所以实际就是以 CSR 结构存储了非零 block),在组成上依然还是 row offset, col index 和 values 这 3 部分。

https://cdn.jsdelivr.net/gh/gaohongy/cloudImages@master/202409271106219.png

由于 block offsets 和 block column index 这两个字段的视角都是 block,所以对于每个 block 而言,目前是无法得知每个 block 内非零元的分布情况的,因此需要将零元和非零元均进行存储。

在稀疏矩阵下,每个 block 内部实际的非零元数量并不多,所以 values 字段的有效信息率是比较低的,因此就有了用二进制来优化存储的一些数据格式,用二进制标识非零元的数据分布情况,实际存储时只需要存储十六进制数,可以减少数据存储量,不过在实际运算时需要再转变为真实结构(简单来说就是时间换空间)。

0%