SDDMM

Sampled dense dense matrix multiplication

\[out = (D_1 \cdot D_2)\odot S\]

In the above equation, \(\odot\) is a hadamard product. The sparse matrix is performed as a mask for computing dense matrix multiplication.

\[out[i][j]=(\Sigma_{k} D_1[i][k]\cdot D_2[j][k])\cdot S[i][j]\]

We provide SDDMM in both coo and csr format. Note that D2 is a transposed matrix.

COO

void sddmm_cuda_coo(
        int k,          //cols for D1
        int nnz,        //non zeros number for graph
        int *rowind,    //row indices of graph
        int *colind,    //col indices of graph
        float *D1,      //left hand Dense matrix
        float *D2,      //right hand Dense matrix
        float *out);

CSR

void sddmm_cuda_csr(
        int m,          //m for S's rows
        int k,          //k for D1's rows
        int nnz,        //non zeros number for graph
        int *rowptr,    //row pointer in CSR format
        int *colind,    //col indices of graph
        float *D1,      //left hand Dense matrix
        float *D2,      //right hand Dense matrix
        float *out);