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

标签 c++ matrix memory-management cuda nvidia

我有一个 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);

然后进行稀疏矩阵*稠密 vector 操作:

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

关于c++ - 以混合(HYB)格式为CUDA中的稀疏矩阵分配内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40539600/

相关文章:

c++ - std::map 分配是否尽可能静态?

linux - linux引导期间的内存分配?

c++ - Qt creator 无法解析 stddef.h --> 不正确的代码完成和突出显示

c++ - 直接丢失或间接丢失-Valgrind问题

matlab - matlab中二维数组的索引

python - Numpy ‘smart’ 对称矩阵

C++:使用非默认构造函数动态分配结构成员数组

python - 如何使用 SIP 制作两个或多个 C++/Qt 类的 python 模块?

C++局部变量销毁顺序

python - 如何在 Python/Numpy 中以最快的方式获取 "n"矩阵的最大值?