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