我有一个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]));
答案 0 :(得分:1)
感谢@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]);