首页 理论教育 SpGEMM实验评估及性能对比

SpGEMM实验评估及性能对比

时间:2023-11-21 理论教育 版权反馈
【摘要】:弄清楚SpGEMM内核与这些因素之间的确切关系是非常具有挑战性的。本节通过一系列实验对比了几种最新SpGEMM实现的性能,其中参与计算的稀疏矩阵的非零值采用双精度浮点格式参与存储和计算。它包含了一组用于处理稀疏矩阵的基本线性代数子程序。该库中包含基于CSR格式的SpGEMM实现,对于不规则稀疏矩阵的乘法,它比其他库的SpGEMM实现更加高效。它支持SpGEMM的两阶段执行,实验分别记录了其两个阶段的执行时间。

SpGEMM实验评估及性能对比

SpGEMM内核的性能与多个因素有关,包括稀疏格式、矩阵稀疏性和计算设备。弄清楚SpGEMM内核与这些因素之间的确切关系是非常具有挑战性的。

本节通过一系列实验对比了几种最新SpGEMM实现的性能,其中参与计算的稀疏矩阵的非零值采用双精度浮点格式参与存储和计算。我们测试的库包括Intel Math Kernel Library(MKL)、NVIDIA CUDA Sparse Library(cuSPARSE)、CSPARSE、CUSP、bhSPARSE和KokkosKernels。

Intel MKL是英特尔处理器的高度并行闭源库。它的子库之一spblas,包括用于稀疏线性代数的标准C和Fortran API。它使用高度封装的内部数据结构对稀疏矩阵执行操作。通过调用mkl_sparse_sp2m来执行SpGEMM,并且输入矩阵都使用CSR或BSR进行压缩。该接口支持两阶段执行,在第一阶段计算输出矩阵的行指针数组,在第二阶段计算输出矩阵的列索引和值数组,我们分别记录了这两个阶段的执行时间。

cuSPARSE是NVIDIA提供的闭源库。它包含了一组用于处理稀疏矩阵的基本线性代数子程序。在我们的测试程序中,首先通过调用cusparseXcoo2csr将COO格式转换为CSR格式,然后依次调用cusparseXcsrgemmnnz和cusparseDcsrgemm来完成类似于MKL两阶段SpGEMM的计算,同时记录每个步骤的执行时间。

CSPARSE是一个用C程序编写的开源单线程稀疏矩阵包。它使用CSC格式存储稀疏矩阵。我们调用cs_multiply来计算两个稀疏矩阵的乘积,并同时记录该过程的执行时间。(www.xing528.com)

CUSP是一个基于Thrust,C + + 的开源库,用于稀疏基本线性代数和图计算。 它为用户提供了灵活且高度封装的API。我们调用multiply来计算以COO格式编码的两个稀疏矩阵的乘积,并记录此调用过程的执行时间。

bhSPARSE是一个开源库,提供了用于在异构并行处理器上进行稀疏矩阵计算的稀疏线性代数接口。该库中包含基于CSR格式的SpGEMM实现,对于不规则稀疏矩阵的乘法,它比其他库的SpGEMM实现更加高效。它由四个阶段组成:计算上限、划分bins、计算结果矩阵和排列数据。

KokkosKernels使用Kokkos共享内存并行编程模型实现了线性代数和图计算的计算内核。它支持SpGEMM的两阶段执行,实验分别记录了其两个阶段的执行时间。此外,我们分别在英特尔多核平台和NVIDIA GPU平台上测试了其性能。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈