以混合(HYB)格式为CUDA中的稀疏矩阵分配内存?

Allocating memory for a sparse matrix in CUDA in hybrid (HYB) format?

我有一个 C00 格式的矩阵,我通过以下代码将其转换为 CSR 格式:

status = cusparseXcoo2csr(handle, cooRowIndex, nnz, n, 
    csrRowPtr, CUSPARSE_INDEX_BASE_ZERO);

然后我想将矩阵从 CSR 格式转换为 HYB 格式,但我不确定我需要为 HYB 格式的矩阵分配多少内存。我在网上看过,找不到任何相关资源。应该分配多少内存?

这是我计划用于从 csr 格式转换为 hyb 格式的内容:

cusparseScsr2hyb(handle_array[i], m, n, 
        descr, 
        cooVal,
        csrRowPtr, 
        cooColIndex, 
        hybA, 
        CUSPARSE_HYB_PARTITION_AUTO);

这是我分配内存的代码,但我不确定要添加什么来为 hybA 分配内存。

cudaStat1 = cudaMalloc((void**)&cooRowIndex, nnz*sizeof(cooRowIndex[0])); // Row indices for A
cudaStat2 = cudaMalloc((void**)&cooColIndex, nnz*sizeof(cooColIndex[0])); // Column indices for A
cudaStat3 = cudaMalloc((void**)&cooVal, nnz*sizeof(cooVal[0]));           // Data values for A
cudaStat4 = cudaMalloc((void**)&csrRowPtr, (n + 1)*sizeof(csrRowPtr[0]));

感谢@RobertCrovella 的评论。

混合矩阵的使用方法如下:

首先创建混合矩阵对象:

cusparseHybMat_t hybA;
cusparseCreateHybMat(&hybA);

然后将你的 coo 矩阵转换为 csr 格式:

status = cusparseXcoo2csr(handle, cooRowIndex, nnz, m, 
        csrRowPtr, CUSPARSE_INDEX_BASE_ZERO);

然后将您的 csr 矩阵转换为 hyb 格式:

cusparseScsr2hyb(handle, m, n, descr, cooVal,
            csrRowPtr, cooColIndex, hybA_array[i], 
            0, CUSPARSE_HYB_PARTITION_AUTO);

然后进行稀疏矩阵*稠密向量运算:

status = cusparseShybmv(handle,CUSPARSE_OPERATION_NON_TRANSPOSE, &alpha, 
    descr, hybA, &xVal[0], &beta, &y[0]);