Sparse Extra Functions#
This module holds all sparse extra routines.
The sparse extra routines describe operations that manipulate sparse matrices.
The routines in this module do not support execution in a hipGraph context.
rocsparse_bsrgeam_nnzb()#
- 
rocsparse_status rocsparse_bsrgeam_nnzb(rocsparse_handle handle, rocsparse_direction dir, rocsparse_int mb, rocsparse_int nb, rocsparse_int block_dim, const rocsparse_mat_descr descr_A, rocsparse_int nnzb_A, const rocsparse_int *bsr_row_ptr_A, const rocsparse_int *bsr_col_ind_A, const rocsparse_mat_descr descr_B, rocsparse_int nnzb_B, const rocsparse_int *bsr_row_ptr_B, const rocsparse_int *bsr_col_ind_B, const rocsparse_mat_descr descr_C, rocsparse_int *bsr_row_ptr_C, rocsparse_int *nnzb_C)#
- Sparse matrix sparse matrix addition using BSR storage format. - rocsparse_bsrgeam_nnzbcomputes the total BSR non-zero elements and the BSR row offsets, that point to the start of every row of the sparse BSR matrix, of the resulting matrix C. It is assumed that- bsr_row_ptr_Chas been allocated with size- mb+1.- Note - This function is blocking with respect to the host. - Note - Currently, only rocsparse_matrix_type_general is supported. - Note - This routine does not support execution in a hipGraph context. - Parameters:
- handle – [in] handle to the rocsparse library context queue. 
- dir – [in] direction that specifies whether to count nonzero elements by rocsparse_direction_row or by rocsparse_direction_column in the BSR matrices \(A\), \(B\), and \(C\). 
- mb – [in] number of block rows in the sparse BSR matrix \(op(A)\) and \(C\). 
- nb – [in] number of block columns of the sparse BSR matrix \(op(B)\) and \(C\). 
- block_dim – [in] the block dimension of the BSR matrix \(A\). Between 1 and m where - m=mb*block_dim.
- descr_A – [in] descriptor of the sparse BSR matrix \(A\). Currently, only rocsparse_matrix_type_general is supported. 
- nnzb_A – [in] number of non-zero block entries of the sparse BSR matrix \(A\). 
- bsr_row_ptr_A – [in] array of - mb+1elements that point to the start of every block row of the sparse BSR matrix \(A\).
- bsr_col_ind_A – [in] array of - nnzb_Aelements containing the column indices of the sparse BSR matrix \(A\).
- descr_B – [in] descriptor of the sparse BSR matrix \(B\). Currently, only rocsparse_matrix_type_general is supported. 
- nnzb_B – [in] number of non-zero block entries of the sparse BSR matrix \(B\). 
- bsr_row_ptr_B – [in] array of - mb+1elements that point to the start of every block row of the sparse BSR matrix \(B\).
- bsr_col_ind_B – [in] array of - nnzb_Belements containing the block column indices of the sparse BSR matrix \(B\).
- descr_C – [in] descriptor of the sparse BSR matrix \(C\). Currently, only rocsparse_matrix_type_general is supported. 
- bsr_row_ptr_C – [out] array of - mb+1elements that point to the start of every block row of the sparse BSR matrix \(C\).
- nnzb_C – [out] pointer to the number of non-zero block entries of the sparse BSR matrix \(C\). - nnzb_Ccan be a host or device pointer.
 
- Return values:
- rocsparse_status_success – the operation completed successfully. 
- rocsparse_status_invalid_handle – the library context was not initialized. 
- rocsparse_status_invalid_size – - mb,- nb,- kb,- nnzb_Aor- nnzb_Bis invalid.
- rocsparse_status_invalid_pointer – - descr_A,- bsr_row_ptr_A,- bsr_col_ind_A,- descr_B,- bsr_row_ptr_B,- bsr_col_ind_B,- descr_C,- bsr_row_ptr_Cor- nnzb_Cis invalid.
- rocsparse_status_not_implemented – - rocsparse_matrix_type!= rocsparse_matrix_type_general.
 
 
rocsparse_bsrgeam()#
- 
rocsparse_status rocsparse_sbsrgeam(rocsparse_handle handle, rocsparse_direction dir, rocsparse_int mb, rocsparse_int nb, rocsparse_int block_dim, const float *alpha, const rocsparse_mat_descr descr_A, rocsparse_int nnzb_A, const float *bsr_val_A, const rocsparse_int *bsr_row_ptr_A, const rocsparse_int *bsr_col_ind_A, const float *beta, const rocsparse_mat_descr descr_B, rocsparse_int nnzb_B, const float *bsr_val_B, const rocsparse_int *bsr_row_ptr_B, const rocsparse_int *bsr_col_ind_B, const rocsparse_mat_descr descr_C, float *bsr_val_C, const rocsparse_int *bsr_row_ptr_C, rocsparse_int *bsr_col_ind_C)#
- 
rocsparse_status rocsparse_dbsrgeam(rocsparse_handle handle, rocsparse_direction dir, rocsparse_int mb, rocsparse_int nb, rocsparse_int block_dim, const double *alpha, const rocsparse_mat_descr descr_A, rocsparse_int nnzb_A, const double *bsr_val_A, const rocsparse_int *bsr_row_ptr_A, const rocsparse_int *bsr_col_ind_A, const double *beta, const rocsparse_mat_descr descr_B, rocsparse_int nnzb_B, const double *bsr_val_B, const rocsparse_int *bsr_row_ptr_B, const rocsparse_int *bsr_col_ind_B, const rocsparse_mat_descr descr_C, double *bsr_val_C, const rocsparse_int *bsr_row_ptr_C, rocsparse_int *bsr_col_ind_C)#
- 
rocsparse_status rocsparse_cbsrgeam(rocsparse_handle handle, rocsparse_direction dir, rocsparse_int mb, rocsparse_int nb, rocsparse_int block_dim, const rocsparse_float_complex *alpha, const rocsparse_mat_descr descr_A, rocsparse_int nnzb_A, const rocsparse_float_complex *bsr_val_A, const rocsparse_int *bsr_row_ptr_A, const rocsparse_int *bsr_col_ind_A, const rocsparse_float_complex *beta, const rocsparse_mat_descr descr_B, rocsparse_int nnzb_B, const rocsparse_float_complex *bsr_val_B, const rocsparse_int *bsr_row_ptr_B, const rocsparse_int *bsr_col_ind_B, const rocsparse_mat_descr descr_C, rocsparse_float_complex *bsr_val_C, const rocsparse_int *bsr_row_ptr_C, rocsparse_int *bsr_col_ind_C)#
- 
rocsparse_status rocsparse_zbsrgeam(rocsparse_handle handle, rocsparse_direction dir, rocsparse_int mb, rocsparse_int nb, rocsparse_int block_dim, const rocsparse_double_complex *alpha, const rocsparse_mat_descr descr_A, rocsparse_int nnzb_A, const rocsparse_double_complex *bsr_val_A, const rocsparse_int *bsr_row_ptr_A, const rocsparse_int *bsr_col_ind_A, const rocsparse_double_complex *beta, const rocsparse_mat_descr descr_B, rocsparse_int nnzb_B, const rocsparse_double_complex *bsr_val_B, const rocsparse_int *bsr_row_ptr_B, const rocsparse_int *bsr_col_ind_B, const rocsparse_mat_descr descr_C, rocsparse_double_complex *bsr_val_C, const rocsparse_int *bsr_row_ptr_C, rocsparse_int *bsr_col_ind_C)#
- Sparse matrix sparse matrix addition using BSR storage format. - rocsparse_bsrgeammultiplies the scalar \(\alpha\) with the sparse \(m \times n\) matrix \(A\), defined in BSR storage format, multiplies the scalar \(\beta\) with the sparse \(mb \times nb\) matrix \(B\), defined in BSR storage format, and adds both resulting matrices to obtain the sparse \(mb \times nb\) matrix \(C\), defined in BSR storage format, such that\[ C := \alpha \cdot A + \beta \cdot B. \]- It is assumed that - bsr_row_ptr_Chas already been filled and that- bsr_val_Cand- bsr_col_ind_Care allocated by the user.- bsr_row_ptr_Cand allocation size of- bsr_col_ind_Cand- bsr_val_Cis defined by the number of non-zero block elements of the sparse BSR matrix C. Both can be obtained by rocsparse_bsrgeam_nnzb().- Example
- This example adds two CSR matrices. - // Initialize scalar multipliers float alpha = 1.0f; float beta = 1.0f; // Create matrix descriptors rocsparse_mat_descr descr_A; rocsparse_mat_descr descr_B; rocsparse_mat_descr descr_C; rocsparse_create_mat_descr(&descr_A); rocsparse_create_mat_descr(&descr_B); rocsparse_create_mat_descr(&descr_C); // Set pointer mode rocsparse_set_pointer_mode(handle, rocsparse_pointer_mode_host); // Obtain number of total non-zero block entries in C and block row pointers of C rocsparse_int nnzb_C; hipMalloc((void**)&bsr_row_ptr_C, sizeof(rocsparse_int) * (mb + 1)); rocsparse_bsrgeam_nnzb(handle, dir, mb, nb, block_dim, descr_A, nnzb_A, bsr_row_ptr_A, bsr_col_ind_A, descr_B, nnzb_B, bsr_row_ptr_B, bsr_col_ind_B, descr_C, bsr_row_ptr_C, &nnzb_C); // Compute block column indices and block values of C hipMalloc((void**)&bsr_col_ind_C, sizeof(rocsparse_int) * nnzb_C); hipMalloc((void**)&bsr_val_C, sizeof(float) * nnzb_C * block_dim * block_dim); rocsparse_sbsrgeam(handle, dir, mb, nb, block_dim, &alpha, descr_A, nnzb_A, bsr_val_A, bsr_row_ptr_A, bsr_col_ind_A, &beta, descr_B, nnzb_B, bsr_val_B, bsr_row_ptr_B, bsr_col_ind_B, descr_C, bsr_val_C, bsr_row_ptr_C, bsr_col_ind_C); 
 - Note - Both scalars \(\alpha\) and \(beta\) have to be valid. - Note - Currently, only rocsparse_matrix_type_general is supported. - Note - This function is blocking with respect to the host. - Note - This routine does not support execution in a hipGraph context. - Parameters:
- handle – [in] handle to the rocsparse library context queue. 
- dir – [in] direction that specifies whether to count nonzero elements by rocsparse_direction_row or by rocsparse_direction_column in the BSR matrices \(A\), \(B\), and \(C\). 
- mb – [in] number of rows of the sparse BSR matrix \(A\), \(B\) and \(C\). 
- nb – [in] number of columns of the sparse BSR matrix \(A\), \(B\) and \(C\). 
- block_dim – [in] the block dimension of the BSR matrix \(A\). Between 1 and m where - m=mb*block_dim.
- alpha – [in] scalar \(\alpha\). 
- descr_A – [in] descriptor of the sparse CSR matrix \(A\). Currently, only rocsparse_matrix_type_general is supported. 
- nnzb_A – [in] number of non-zero block entries of the sparse BSR matrix \(A\). 
- bsr_val_A – [in] array of - nnzb_Ablock elements of the sparse BSR matrix \(A\).
- bsr_row_ptr_A – [in] array of - mb+1block elements that point to the start of every block row of the sparse BSR matrix \(A\).
- bsr_col_ind_A – [in] array of - nnzb_Ablock elements containing the block column indices of the sparse BSR matrix \(A\).
- beta – [in] scalar \(\beta\). 
- descr_B – [in] descriptor of the sparse BSR matrix \(B\). Currently, only rocsparse_matrix_type_general is supported. 
- nnzb_B – [in] number of non-zero block entries of the sparse BSR matrix \(B\). 
- bsr_val_B – [in] array of - nnzb_Bblock elements of the sparse BSR matrix \(B\).
- bsr_row_ptr_B – [in] array of - mb+1block elements that point to the start of every block row of the sparse BSR matrix \(B\).
- bsr_col_ind_B – [in] array of - nnzb_Bblock elements containing the block column indices of the sparse BSR matrix \(B\).
- descr_C – [in] descriptor of the sparse BSR matrix \(C\). Currently, only rocsparse_matrix_type_general is supported. 
- bsr_val_C – [out] array of block elements of the sparse BSR matrix \(C\). 
- bsr_row_ptr_C – [in] array of - mb+1block elements that point to the start of every block row of the sparse BSR matrix \(C\).
- bsr_col_ind_C – [out] array of block elements containing the block column indices of the sparse BSR matrix \(C\). 
 
- Return values:
- rocsparse_status_success – the operation completed successfully. 
- rocsparse_status_invalid_handle – the library context was not initialized. 
- rocsparse_status_invalid_size – - mb,- nb,- nnzb_Aor- nnzb_Bis invalid.
- rocsparse_status_invalid_pointer – - alpha,- descr_A,- bsr_val_A,- bsr_row_ptr_A,- bsr_col_ind_A,- beta,- descr_B,- bsr_val_B,- bsr_row_ptr_B,- bsr_col_ind_B,- descr_C,- csr_val_C,- bsr_row_ptr_Cor- bsr_col_ind_Cis invalid.
- rocsparse_status_not_implemented – - rocsparse_matrix_type!= rocsparse_matrix_type_general.
 
 
rocsparse_bsrgemm_buffer_size()#
- 
rocsparse_status rocsparse_sbsrgemm_buffer_size(rocsparse_handle handle, rocsparse_direction dir, rocsparse_operation trans_A, rocsparse_operation trans_B, rocsparse_int mb, rocsparse_int nb, rocsparse_int kb, rocsparse_int block_dim, const float *alpha, const rocsparse_mat_descr descr_A, rocsparse_int nnzb_A, const rocsparse_int *bsr_row_ptr_A, const rocsparse_int *bsr_col_ind_A, const rocsparse_mat_descr descr_B, rocsparse_int nnzb_B, const rocsparse_int *bsr_row_ptr_B, const rocsparse_int *bsr_col_ind_B, const float *beta, const rocsparse_mat_descr descr_D, rocsparse_int nnzb_D, const rocsparse_int *bsr_row_ptr_D, const rocsparse_int *bsr_col_ind_D, rocsparse_mat_info info_C, size_t *buffer_size)#
- 
rocsparse_status rocsparse_dbsrgemm_buffer_size(rocsparse_handle handle, rocsparse_direction dir, rocsparse_operation trans_A, rocsparse_operation trans_B, rocsparse_int mb, rocsparse_int nb, rocsparse_int kb, rocsparse_int block_dim, const double *alpha, const rocsparse_mat_descr descr_A, rocsparse_int nnzb_A, const rocsparse_int *bsr_row_ptr_A, const rocsparse_int *bsr_col_ind_A, const rocsparse_mat_descr descr_B, rocsparse_int nnzb_B, const rocsparse_int *bsr_row_ptr_B, const rocsparse_int *bsr_col_ind_B, const double *beta, const rocsparse_mat_descr descr_D, rocsparse_int nnzb_D, const rocsparse_int *bsr_row_ptr_D, const rocsparse_int *bsr_col_ind_D, rocsparse_mat_info info_C, size_t *buffer_size)#
- 
rocsparse_status rocsparse_cbsrgemm_buffer_size(rocsparse_handle handle, rocsparse_direction dir, rocsparse_operation trans_A, rocsparse_operation trans_B, rocsparse_int mb, rocsparse_int nb, rocsparse_int kb, rocsparse_int block_dim, const rocsparse_float_complex *alpha, const rocsparse_mat_descr descr_A, rocsparse_int nnzb_A, const rocsparse_int *bsr_row_ptr_A, const rocsparse_int *bsr_col_ind_A, const rocsparse_mat_descr descr_B, rocsparse_int nnzb_B, const rocsparse_int *bsr_row_ptr_B, const rocsparse_int *bsr_col_ind_B, const rocsparse_float_complex *beta, const rocsparse_mat_descr descr_D, rocsparse_int nnzb_D, const rocsparse_int *bsr_row_ptr_D, const rocsparse_int *bsr_col_ind_D, rocsparse_mat_info info_C, size_t *buffer_size)#
- 
rocsparse_status rocsparse_zbsrgemm_buffer_size(rocsparse_handle handle, rocsparse_direction dir, rocsparse_operation trans_A, rocsparse_operation trans_B, rocsparse_int mb, rocsparse_int nb, rocsparse_int kb, rocsparse_int block_dim, const rocsparse_double_complex *alpha, const rocsparse_mat_descr descr_A, rocsparse_int nnzb_A, const rocsparse_int *bsr_row_ptr_A, const rocsparse_int *bsr_col_ind_A, const rocsparse_mat_descr descr_B, rocsparse_int nnzb_B, const rocsparse_int *bsr_row_ptr_B, const rocsparse_int *bsr_col_ind_B, const rocsparse_double_complex *beta, const rocsparse_mat_descr descr_D, rocsparse_int nnzb_D, const rocsparse_int *bsr_row_ptr_D, const rocsparse_int *bsr_col_ind_D, rocsparse_mat_info info_C, size_t *buffer_size)#
- Sparse matrix sparse matrix multiplication using BSR storage format. - rocsparse_bsrgemm_buffer_sizereturns the size of the temporary storage buffer that is required by rocsparse_bsrgemm_nnzb(), rocsparse_sbsrgemm(), rocsparse_dbsrgemm(), rocsparse_cbsrgemm() and rocsparse_zbsrgemm(). The temporary storage buffer must be allocated by the user.- Note - This function is blocking with respect to the host. - Note - Currently, only - trans_A==- trans_B== rocsparse_operation_none is supported.- Note - Currently, only rocsparse_matrix_type_general is supported. - Note - This routine does not support execution in a hipGraph context. - Parameters:
- handle – [in] handle to the rocsparse library context queue. 
- dir – [in] direction that specifies whether to count nonzero elements by rocsparse_direction_row or by rocsparse_direction_column in the BSR matrices \(A\), \(B\), \(C\), and \(D\). 
- trans_A – [in] matrix \(A\) operation type. 
- trans_B – [in] matrix \(B\) operation type. 
- mb – [in] number of block rows in the sparse BSR matrix \(op(A)\) and \(C\). 
- nb – [in] number of block columns of the sparse BSR matrix \(op(B)\) and \(C\). 
- kb – [in] number of block columns of the sparse BSR matrix \(op(A)\) and number of rows of the sparse BSR matrix \(op(B)\). 
- block_dim – [in] the block dimension of the BSR matrix \(A\), \(B\), \(C\), and \(D\). 
- alpha – [in] scalar \(\alpha\). 
- descr_A – [in] descriptor of the sparse BSR matrix \(A\). Currently, only rocsparse_matrix_type_general is supported. 
- nnzb_A – [in] number of non-zero block entries of the sparse BSR matrix \(A\). 
- bsr_row_ptr_A – [in] array of - mb+1elements ( \(op(A) == A\),- kb+1otherwise) that point to the start of every block row of the sparse BSR matrix \(op(A)\).
- bsr_col_ind_A – [in] array of - nnzb_Aelements containing the block column indices of the sparse BSR matrix \(A\).
- descr_B – [in] descriptor of the sparse BSR matrix \(B\). Currently, only rocsparse_matrix_type_general is supported. 
- nnzb_B – [in] number of non-zero block entries of the sparse BSR matrix \(B\). 
- bsr_row_ptr_B – [in] array of - kb+1elements ( \(op(B) == B\),- mb+1otherwise) that point to the start of every block row of the sparse BSR matrix \(op(B)\).
- bsr_col_ind_B – [in] array of - nnzb_Belements containing the block column indices of the sparse BSR matrix \(B\).
- beta – [in] scalar \(\beta\). 
- descr_D – [in] descriptor of the sparse BSR matrix \(D\). Currently, only rocsparse_matrix_type_general is supported. 
- nnzb_D – [in] number of non-zero block entries of the sparse BSR matrix \(D\). 
- bsr_row_ptr_D – [in] array of - mb+1elements that point to the start of every block row of the sparse BSR matrix \(D\).
- bsr_col_ind_D – [in] array of - nnzb_Delements containing the block column indices of the sparse BSR matrix \(D\).
- info_C – [inout] structure that holds meta data for the sparse BSR matrix \(C\). 
- buffer_size – [out] number of bytes of the temporary storage buffer required by rocsparse_bsrgemm_nnzb(), rocsparse_sbsrgemm(), rocsparse_dbsrgemm(), rocsparse_cbsrgemm() and rocsparse_zbsrgemm(). 
 
- Return values:
- rocsparse_status_success – the operation completed successfully. 
- rocsparse_status_invalid_handle – the library context was not initialized. 
- rocsparse_status_invalid_size – - mb,- nb,- kb,- block_dim,- nnzb_A,- nnzb_Bor- nnzb_Dis invalid.
- rocsparse_status_invalid_pointer – - alphaand- betaare invalid,- descr_A,- bsr_row_ptr_A,- bsr_col_ind_A,- descr_B,- bsr_row_ptr_Bor- bsr_col_ind_Bare invalid if- alphais valid,- descr_D,- bsr_row_ptr_Dor- bsr_col_ind_Dis invalid if- betais valid,- info_Cor- buffer_sizeis invalid.
- rocsparse_status_not_implemented – - trans_A!= rocsparse_operation_none,- trans_B!= rocsparse_operation_none, or- rocsparse_matrix_type!= rocsparse_matrix_type_general.
 
 
rocsparse_bsrgemm_nnzb()#
- 
rocsparse_status rocsparse_bsrgemm_nnzb(rocsparse_handle handle, rocsparse_direction dir, rocsparse_operation trans_A, rocsparse_operation trans_B, rocsparse_int mb, rocsparse_int nb, rocsparse_int kb, rocsparse_int block_dim, const rocsparse_mat_descr descr_A, rocsparse_int nnzb_A, const rocsparse_int *bsr_row_ptr_A, const rocsparse_int *bsr_col_ind_A, const rocsparse_mat_descr descr_B, rocsparse_int nnzb_B, const rocsparse_int *bsr_row_ptr_B, const rocsparse_int *bsr_col_ind_B, const rocsparse_mat_descr descr_D, rocsparse_int nnzb_D, const rocsparse_int *bsr_row_ptr_D, const rocsparse_int *bsr_col_ind_D, const rocsparse_mat_descr descr_C, rocsparse_int *bsr_row_ptr_C, rocsparse_int *nnzb_C, const rocsparse_mat_info info_C, void *temp_buffer)#
- Sparse matrix sparse matrix multiplication using BSR storage format. - rocsparse_bsrgemm_nnzbcomputes the total BSR non-zero block elements and the BSR block row offsets, that point to the start of every block row of the sparse BSR matrix, of the resulting multiplied matrix C. It is assumed that- bsr_row_ptr_Chas been allocated with size- mb+1. The required buffer size can be obtained by rocsparse_sbsrgemm_buffer_size(), rocsparse_dbsrgemm_buffer_size(), rocsparse_cbsrgemm_buffer_size() and rocsparse_zbsrgemm_buffer_size(), respectively.- Note - This function is blocking with respect to the host. - Note - Currently, only - trans_A==- trans_B== rocsparse_operation_none is supported.- Note - Currently, only rocsparse_matrix_type_general is supported. - Note - This routine does not support execution in a hipGraph context. - Parameters:
- handle – [in] handle to the rocsparse library context queue. 
- dir – [in] direction that specifies whether to count nonzero elements by rocsparse_direction_row or by rocsparse_direction_column in the BSR matrices \(A\), \(B\), \(C\), and \(D\). 
- trans_A – [in] matrix \(A\) operation type. 
- trans_B – [in] matrix \(B\) operation type. 
- mb – [in] number of block rows in the sparse BSR matrix \(op(A)\) and \(C\). 
- nb – [in] number of block columns of the sparse BSR matrix \(op(B)\) and \(C\). 
- kb – [in] number of block columns of the sparse BSR matrix \(op(A)\) and number of rows of the sparse BSR matrix \(op(B)\). 
- block_dim – [in] the block dimension of the BSR matrix \(A\), \(B\), \(C\), and \(D\). 
- descr_A – [in] descriptor of the sparse BSR matrix \(A\). Currently, only rocsparse_matrix_type_general is supported. 
- nnzb_A – [in] number of non-zero block entries of the sparse BSR matrix \(A\). 
- bsr_row_ptr_A – [in] array of - mb+1block elements ( \(op(A) == A\),- kb+1otherwise) that point to the start of every row of the sparse BSR matrix \(op(A)\).
- bsr_col_ind_A – [in] array of - nnzb_Ablock elements containing the block column indices of the sparse BSR matrix \(A\).
- descr_B – [in] descriptor of the sparse BSR matrix \(B\). Currently, only rocsparse_matrix_type_general is supported. 
- nnzb_B – [in] number of non-zero block entries of the sparse BSR matrix \(B\). 
- bsr_row_ptr_B – [in] array of - kb+1block elements ( \(op(B) == B\),- mb+1otherwise) that point to the start of every block row of the sparse BSR matrix \(op(B)\).
- bsr_col_ind_B – [in] array of - nnzb_Bblock elements containing the block column indices of the sparse BSR matrix \(B\).
- descr_D – [in] descriptor of the sparse BSR matrix \(D\). Currently, only rocsparse_matrix_type_general is supported. 
- nnzb_D – [in] number of non-zero block entries of the sparse BSR matrix \(D\). 
- bsr_row_ptr_D – [in] array of - mb+1block elements that point to the start of every block row of the sparse BSR matrix \(D\).
- bsr_col_ind_D – [in] array of - nnzb_Dblock elements containing the block column indices of the sparse BSR matrix \(D\).
- descr_C – [in] descriptor of the sparse BSR matrix \(C\). Currently, only rocsparse_matrix_type_general is supported. 
- bsr_row_ptr_C – [out] array of - mb+1block elements that point to the start of every block row of the sparse BSR matrix \(C\).
- nnzb_C – [out] pointer to the number of non-zero block entries of the sparse BSR matrix \(C\). 
- info_C – [in] structure that holds meta data for the sparse BSR matrix \(C\). 
- temp_buffer – [in] temporary storage buffer allocated by the user, size is returned by rocsparse_sbsrgemm_buffer_size(), rocsparse_dbsrgemm_buffer_size(), rocsparse_cbsrgemm_buffer_size() or rocsparse_zbsrgemm_buffer_size(). 
 
- Return values:
- rocsparse_status_success – the operation completed successfully. 
- rocsparse_status_invalid_handle – the library context was not initialized. 
- rocsparse_status_invalid_size – - mb,- nb,- kb,- block_dim,- nnzb_A,- nnzb_Bor- nnzb_Dis invalid.
- rocsparse_status_invalid_pointer – - descr_A,- bsr_row_ptr_A,- bsr_col_ind_A,- descr_B,- bsr_row_ptr_B,- bsr_col_ind_B,- descr_D,- bsr_row_ptr_D,- bsr_col_ind_D,- descr_C,- bsr_row_ptr_C,- nnzb_C,- info_Cor- temp_bufferis invalid.
- rocsparse_status_memory_error – additional buffer for long rows could not be allocated. 
- rocsparse_status_not_implemented – - trans_A!= rocsparse_operation_none,- trans_B!= rocsparse_operation_none, or- rocsparse_matrix_type!= rocsparse_matrix_type_general.
 
 
rocsparse_bsrgemm()#
- 
rocsparse_status rocsparse_sbsrgemm(rocsparse_handle handle, rocsparse_direction dir, rocsparse_operation trans_A, rocsparse_operation trans_B, rocsparse_int mb, rocsparse_int nb, rocsparse_int kb, rocsparse_int block_dim, const float *alpha, const rocsparse_mat_descr descr_A, rocsparse_int nnzb_A, const float *bsr_val_A, const rocsparse_int *bsr_row_ptr_A, const rocsparse_int *bsr_col_ind_A, const rocsparse_mat_descr descr_B, rocsparse_int nnzb_B, const float *bsr_val_B, const rocsparse_int *bsr_row_ptr_B, const rocsparse_int *bsr_col_ind_B, const float *beta, const rocsparse_mat_descr descr_D, rocsparse_int nnzb_D, const float *bsr_val_D, const rocsparse_int *bsr_row_ptr_D, const rocsparse_int *bsr_col_ind_D, const rocsparse_mat_descr descr_C, float *bsr_val_C, const rocsparse_int *bsr_row_ptr_C, rocsparse_int *bsr_col_ind_C, const rocsparse_mat_info info_C, void *temp_buffer)#
- 
rocsparse_status rocsparse_dbsrgemm(rocsparse_handle handle, rocsparse_direction dir, rocsparse_operation trans_A, rocsparse_operation trans_B, rocsparse_int mb, rocsparse_int nb, rocsparse_int kb, rocsparse_int block_dim, const double *alpha, const rocsparse_mat_descr descr_A, rocsparse_int nnzb_A, const double *bsr_val_A, const rocsparse_int *bsr_row_ptr_A, const rocsparse_int *bsr_col_ind_A, const rocsparse_mat_descr descr_B, rocsparse_int nnzb_B, const double *bsr_val_B, const rocsparse_int *bsr_row_ptr_B, const rocsparse_int *bsr_col_ind_B, const double *beta, const rocsparse_mat_descr descr_D, rocsparse_int nnzb_D, const double *bsr_val_D, const rocsparse_int *bsr_row_ptr_D, const rocsparse_int *bsr_col_ind_D, const rocsparse_mat_descr descr_C, double *bsr_val_C, const rocsparse_int *bsr_row_ptr_C, rocsparse_int *bsr_col_ind_C, const rocsparse_mat_info info_C, void *temp_buffer)#
- 
rocsparse_status rocsparse_cbsrgemm(rocsparse_handle handle, rocsparse_direction dir, rocsparse_operation trans_A, rocsparse_operation trans_B, rocsparse_int mb, rocsparse_int nb, rocsparse_int kb, rocsparse_int block_dim, const rocsparse_float_complex *alpha, const rocsparse_mat_descr descr_A, rocsparse_int nnzb_A, const rocsparse_float_complex *bsr_val_A, const rocsparse_int *bsr_row_ptr_A, const rocsparse_int *bsr_col_ind_A, const rocsparse_mat_descr descr_B, rocsparse_int nnzb_B, const rocsparse_float_complex *bsr_val_B, const rocsparse_int *bsr_row_ptr_B, const rocsparse_int *bsr_col_ind_B, const rocsparse_float_complex *beta, const rocsparse_mat_descr descr_D, rocsparse_int nnzb_D, const rocsparse_float_complex *bsr_val_D, const rocsparse_int *bsr_row_ptr_D, const rocsparse_int *bsr_col_ind_D, const rocsparse_mat_descr descr_C, rocsparse_float_complex *bsr_val_C, const rocsparse_int *bsr_row_ptr_C, rocsparse_int *bsr_col_ind_C, const rocsparse_mat_info info_C, void *temp_buffer)#
- 
rocsparse_status rocsparse_zbsrgemm(rocsparse_handle handle, rocsparse_direction dir, rocsparse_operation trans_A, rocsparse_operation trans_B, rocsparse_int mb, rocsparse_int nb, rocsparse_int kb, rocsparse_int block_dim, const rocsparse_double_complex *alpha, const rocsparse_mat_descr descr_A, rocsparse_int nnzb_A, const rocsparse_double_complex *bsr_val_A, const rocsparse_int *bsr_row_ptr_A, const rocsparse_int *bsr_col_ind_A, const rocsparse_mat_descr descr_B, rocsparse_int nnzb_B, const rocsparse_double_complex *bsr_val_B, const rocsparse_int *bsr_row_ptr_B, const rocsparse_int *bsr_col_ind_B, const rocsparse_double_complex *beta, const rocsparse_mat_descr descr_D, rocsparse_int nnzb_D, const rocsparse_double_complex *bsr_val_D, const rocsparse_int *bsr_row_ptr_D, const rocsparse_int *bsr_col_ind_D, const rocsparse_mat_descr descr_C, rocsparse_double_complex *bsr_val_C, const rocsparse_int *bsr_row_ptr_C, rocsparse_int *bsr_col_ind_C, const rocsparse_mat_info info_C, void *temp_buffer)#
- Sparse matrix sparse matrix multiplication using BSR storage format. - rocsparse_bsrgemmmultiplies the scalar \(\alpha\) with the sparse \(mb \times kb\) matrix \(A\), defined in BSR storage format, and the sparse \(kb \times nb\) matrix \(B\), defined in BSR storage format, and adds the result to the sparse \(mb \times nb\) matrix \(D\) that is multiplied by \(\beta\). The final result is stored in the sparse \(mb \times nb\) matrix \(C\), defined in BSR storage format, such that\[ C := \alpha \cdot op(A) \cdot op(B) + \beta \cdot D, \]with\[\begin{split} op(A) = \left\{ \begin{array}{ll} A, & \text{if trans_A == rocsparse_operation_none} \\ A^T, & \text{if trans_A == rocsparse_operation_transpose} \\ A^H, & \text{if trans_A == rocsparse_operation_conjugate_transpose} \end{array} \right. \end{split}\]and\[\begin{split} op(B) = \left\{ \begin{array}{ll} B, & \text{if trans_B == rocsparse_operation_none} \\ B^T, & \text{if trans_B == rocsparse_operation_transpose} \\ B^H, & \text{if trans_B == rocsparse_operation_conjugate_transpose} \end{array} \right. \end{split}\]- It is assumed that - bsr_row_ptr_Chas already been filled and that- bsr_val_Cand- bsr_col_ind_Care allocated by the user.- bsr_row_ptr_Cand allocation size of- bsr_col_ind_Cand- bsr_val_Cis defined by the number of non-zero elements of the sparse BSR matrix C. Both can be obtained by rocsparse_bsrgemm_nnzb(). The required buffer size for the computation can be obtained by rocsparse_sbsrgemm_buffer_size(), rocsparse_dbsrgemm_buffer_size(), rocsparse_cbsrgemm_buffer_size() and rocsparse_zbsrgemm_buffer_size(), respectively.- Example
- This example multiplies two BSR matrices with a scalar alpha and adds the result to another BSR matrix. - // Initialize scalar multipliers float alpha = 2.0f; float beta = 1.0f; // Create matrix descriptors rocsparse_mat_descr descr_A; rocsparse_mat_descr descr_B; rocsparse_mat_descr descr_C; rocsparse_mat_descr descr_D; rocsparse_create_mat_descr(&descr_A); rocsparse_create_mat_descr(&descr_B); rocsparse_create_mat_descr(&descr_C); rocsparse_create_mat_descr(&descr_D); // Create matrix info structure rocsparse_mat_info info_C; rocsparse_create_mat_info(&info_C); // Set pointer mode rocsparse_set_pointer_mode(handle, rocsparse_pointer_mode_host); // Query rocsparse for the required buffer size size_t buffer_size; rocsparse_sbsrgemm_buffer_size(handle, rocsparse_direction_row, rocsparse_operation_none, rocsparse_operation_none, mb, nb, kb, block_dim, &alpha, descr_A, nnzb_A, bsr_row_ptr_A, bsr_col_ind_A, descr_B, nnzb_B, bsr_row_ptr_B, bsr_col_ind_B, &beta, descr_D, nnzb_D, bsr_row_ptr_D, bsr_col_ind_D, info_C, &buffer_size); // Allocate buffer void* buffer; hipMalloc(&buffer, buffer_size); // Obtain number of total non-zero block entries in C and block row pointers of C rocsparse_int nnzb_C; hipMalloc((void**)&bsr_row_ptr_C, sizeof(rocsparse_int) * (mb + 1)); rocsparse_bsrgemm_nnzb(handle, rocsparse_direction_row, rocsparse_operation_none, rocsparse_operation_none, mb, nb, kb, block_dim, descr_A, nnzb_A, bsr_row_ptr_A, bsr_col_ind_A, descr_B, nnzb_B, bsr_row_ptr_B, bsr_col_ind_B, descr_D, nnzb_D, bsr_row_ptr_D, bsr_col_ind_D, descr_C, bsr_row_ptr_C, &nnzb_C, info_C, buffer); // Compute block column indices and values of C hipMalloc((void**)&bsr_col_ind_C, sizeof(rocsparse_int) * nnzb_C); hipMalloc((void**)&bsr_val_C, sizeof(float) * block_dim * block_dim *nnzb_C); rocsparse_sbsrgemm(handle, rocsparse_direction_row, rocsparse_operation_none, rocsparse_operation_none, mb, nb, kb, block_dim, &alpha, descr_A, nnzb_A, bsr_val_A, bsr_row_ptr_A, bsr_col_ind_A, descr_B, nnzb_B, bsr_val_B, bsr_row_ptr_B, bsr_col_ind_B, &beta, descr_D, nnzb_D, bsr_val_D, bsr_row_ptr_D, bsr_col_ind_D, descr_C, bsr_val_C, bsr_row_ptr_C, bsr_col_ind_C, info_C, buffer); 
 - Note - This function does not produce deterministic results. - Note - If \(\alpha == 0\), then \(C = \beta \cdot D\) will be computed. - Note - If \(\beta == 0\), then \(C = \alpha \cdot op(A) \cdot op(B)\) will be computed. - Note - \(\alpha == beta == 0\) is invalid. - Note - Currently, only - trans_A== rocsparse_operation_none is supported.- Note - Currently, only - trans_B== rocsparse_operation_none is supported.- Note - Currently, only rocsparse_matrix_type_general is supported. - Note - This function is blocking with respect to the host. - Note - This routine does not support execution in a hipGraph context. - Parameters:
- handle – [in] handle to the rocsparse library context queue. 
- dir – [in] direction that specifies whether to count nonzero elements by rocsparse_direction_row or by rocsparse_direction_column in the BSR matrices \(A\), \(B\), \(C\), and \(D\). 
- trans_A – [in] matrix \(A\) operation type. 
- trans_B – [in] matrix \(B\) operation type. 
- mb – [in] number of block rows of the sparse BSR matrix \(op(A)\) and \(C\). 
- nb – [in] number of block columns of the sparse BSR matrix \(op(B)\) and \(C\). 
- kb – [in] number of block columns of the sparse BSR matrix \(op(A)\) and number of block rows of the sparse BSR matrix \(op(B)\). 
- block_dim – [in] the block dimension of the BSR matrix \(A\), \(B\), \(C\), and \(D\). 
- alpha – [in] scalar \(\alpha\). 
- descr_A – [in] descriptor of the sparse BSR matrix \(A\). Currently, only rocsparse_matrix_type_general is supported. 
- nnzb_A – [in] number of non-zero block entries of the sparse BSR matrix \(A\). 
- bsr_val_A – [in] array of - nnzb_Ablock elements of the sparse BSR matrix \(A\).
- bsr_row_ptr_A – [in] array of - mb+1block elements ( \(op(A) == A\),- kb+1otherwise) that point to the start of every block row of the sparse BSR matrix \(op(A)\).
- bsr_col_ind_A – [in] array of - nnzb_Ablock elements containing the block column indices of the sparse BSR matrix \(A\).
- descr_B – [in] descriptor of the sparse BSR matrix \(B\). Currently, only rocsparse_matrix_type_general is supported. 
- nnzb_B – [in] number of non-zero block entries of the sparse BSR matrix \(B\). 
- bsr_val_B – [in] array of - nnzb_Bblock elements of the sparse BSR matrix \(B\).
- bsr_row_ptr_B – [in] array of - kb+1block elements ( \(op(B) == B\),- mb+1otherwise) that point to the start of every block row of the sparse BSR matrix \(op(B)\).
- bsr_col_ind_B – [in] array of - nnzb_Bblock elements containing the block column indices of the sparse BSR matrix \(B\).
- beta – [in] scalar \(\beta\). 
- descr_D – [in] descriptor of the sparse BSR matrix \(D\). Currently, only rocsparse_matrix_type_general is supported. 
- nnzb_D – [in] number of non-zero block entries of the sparse BSR matrix \(D\). 
- bsr_val_D – [in] array of - nnzb_Dblock elements of the sparse BSR matrix \(D\).
- bsr_row_ptr_D – [in] array of - mb+1block elements that point to the start of every block row of the sparse BSR matrix \(D\).
- bsr_col_ind_D – [in] array of - nnzb_Dblock elements containing the block column indices of the sparse BSR matrix \(D\).
- descr_C – [in] descriptor of the sparse BSR matrix \(C\). Currently, only rocsparse_matrix_type_general is supported. 
- bsr_val_C – [out] array of - nnzb_Celements of the sparse BSR matrix \(C\).
- bsr_row_ptr_C – [in] array of - mb+1block elements that point to the start of every block row of the sparse BSR matrix \(C\).
- bsr_col_ind_C – [out] array of - nnzb_Cblock elements containing the block column indices of the sparse BSR matrix \(C\).
- info_C – [in] structure that holds meta data for the sparse BSR matrix \(C\). 
- temp_buffer – [in] temporary storage buffer allocated by the user, size is returned by rocsparse_sbsrgemm_buffer_size(), rocsparse_dbsrgemm_buffer_size(), rocsparse_cbsrgemm_buffer_size() or rocsparse_zbsrgemm_buffer_size(). 
 
- Return values:
- rocsparse_status_success – the operation completed successfully. 
- rocsparse_status_invalid_handle – the library context was not initialized. 
- rocsparse_status_invalid_size – - mb,- nb,- kb,- block_dim,- nnzb_A,- nnzb_Bor- nnzb_Dis invalid.
- rocsparse_status_invalid_pointer – - alphaand- betaare invalid,- descr_A,- bsr_val_A,- bsr_row_ptr_A,- bsr_col_ind_A,- descr_B,- bsr_val_B,- bsr_row_ptr_Bor- bsr_col_ind_Bare invalid if- alphais valid,- descr_D,- bsr_val_D,- bsr_row_ptr_Dor- bsr_col_ind_Dis invalid if- betais valid,- bsr_val_C,- bsr_row_ptr_C,- bsr_col_ind_C,- info_Cor- temp_bufferis invalid.
- rocsparse_status_memory_error – additional buffer for long rows could not be allocated. 
- rocsparse_status_not_implemented – - trans_A!= rocsparse_operation_none,- trans_B!= rocsparse_operation_none, or- rocsparse_matrix_type!= rocsparse_matrix_type_general.
 
 
rocsparse_csrgeam_nnz()#
- 
rocsparse_status rocsparse_csrgeam_nnz(rocsparse_handle handle, rocsparse_int m, rocsparse_int n, const rocsparse_mat_descr descr_A, rocsparse_int nnz_A, const rocsparse_int *csr_row_ptr_A, const rocsparse_int *csr_col_ind_A, const rocsparse_mat_descr descr_B, rocsparse_int nnz_B, const rocsparse_int *csr_row_ptr_B, const rocsparse_int *csr_col_ind_B, const rocsparse_mat_descr descr_C, rocsparse_int *csr_row_ptr_C, rocsparse_int *nnz_C)#
- Sparse matrix sparse matrix addition using CSR storage format. - rocsparse_csrgeam_nnzcomputes the total CSR non-zero elements and the CSR row offsets, that point to the start of every row of the sparse CSR matrix, of the resulting matrix C. It is assumed that- csr_row_ptr_Chas been allocated with size- m+1.- Note - This function is blocking with respect to the host. - Note - Currently, only rocsparse_matrix_type_general is supported. - Note - This routine does not support execution in a hipGraph context. - Parameters:
- handle – [in] handle to the rocsparse library context queue. 
- m – [in] number of rows of the sparse CSR matrix \(A\), \(B\) and \(C\). 
- n – [in] number of columns of the sparse CSR matrix \(A\), \(B\) and \(C\). 
- descr_A – [in] descriptor of the sparse CSR matrix \(A\). Currently, only rocsparse_matrix_type_general is supported. 
- nnz_A – [in] number of non-zero entries of the sparse CSR matrix \(A\). 
- csr_row_ptr_A – [in] array of - m+1elements that point to the start of every row of the sparse CSR matrix \(A\).
- csr_col_ind_A – [in] array of - nnz_Aelements containing the column indices of the sparse CSR matrix \(A\).
- descr_B – [in] descriptor of the sparse CSR matrix \(B\). Currently, only rocsparse_matrix_type_general is supported. 
- nnz_B – [in] number of non-zero entries of the sparse CSR matrix \(B\). 
- csr_row_ptr_B – [in] array of - m+1elements that point to the start of every row of the sparse CSR matrix \(B\).
- csr_col_ind_B – [in] array of - nnz_Belements containing the column indices of the sparse CSR matrix \(B\).
- descr_C – [in] descriptor of the sparse CSR matrix \(C\). Currently, only rocsparse_matrix_type_general is supported. 
- csr_row_ptr_C – [out] array of - m+1elements that point to the start of every row of the sparse CSR matrix \(C\).
- nnz_C – [out] pointer to the number of non-zero entries of the sparse CSR matrix \(C\). - nnz_Ccan be a host or device pointer.
 
- Return values:
- rocsparse_status_success – the operation completed successfully. 
- rocsparse_status_invalid_handle – the library context was not initialized. 
- rocsparse_status_invalid_size – - m,- n,- nnz_Aor- nnz_Bis invalid.
- rocsparse_status_invalid_pointer – - descr_A,- csr_row_ptr_A,- csr_col_ind_A,- descr_B,- csr_row_ptr_B,- csr_col_ind_B,- descr_C,- csr_row_ptr_Cor- nnz_Cis invalid.
- rocsparse_status_not_implemented – - rocsparse_matrix_type!= rocsparse_matrix_type_general.
 
 
rocsparse_csrgeam()#
- 
rocsparse_status rocsparse_scsrgeam(rocsparse_handle handle, rocsparse_int m, rocsparse_int n, const float *alpha, const rocsparse_mat_descr descr_A, rocsparse_int nnz_A, const float *csr_val_A, const rocsparse_int *csr_row_ptr_A, const rocsparse_int *csr_col_ind_A, const float *beta, const rocsparse_mat_descr descr_B, rocsparse_int nnz_B, const float *csr_val_B, const rocsparse_int *csr_row_ptr_B, const rocsparse_int *csr_col_ind_B, const rocsparse_mat_descr descr_C, float *csr_val_C, const rocsparse_int *csr_row_ptr_C, rocsparse_int *csr_col_ind_C)#
- 
rocsparse_status rocsparse_dcsrgeam(rocsparse_handle handle, rocsparse_int m, rocsparse_int n, const double *alpha, const rocsparse_mat_descr descr_A, rocsparse_int nnz_A, const double *csr_val_A, const rocsparse_int *csr_row_ptr_A, const rocsparse_int *csr_col_ind_A, const double *beta, const rocsparse_mat_descr descr_B, rocsparse_int nnz_B, const double *csr_val_B, const rocsparse_int *csr_row_ptr_B, const rocsparse_int *csr_col_ind_B, const rocsparse_mat_descr descr_C, double *csr_val_C, const rocsparse_int *csr_row_ptr_C, rocsparse_int *csr_col_ind_C)#
- 
rocsparse_status rocsparse_ccsrgeam(rocsparse_handle handle, rocsparse_int m, rocsparse_int n, const rocsparse_float_complex *alpha, const rocsparse_mat_descr descr_A, rocsparse_int nnz_A, const rocsparse_float_complex *csr_val_A, const rocsparse_int *csr_row_ptr_A, const rocsparse_int *csr_col_ind_A, const rocsparse_float_complex *beta, const rocsparse_mat_descr descr_B, rocsparse_int nnz_B, const rocsparse_float_complex *csr_val_B, const rocsparse_int *csr_row_ptr_B, const rocsparse_int *csr_col_ind_B, const rocsparse_mat_descr descr_C, rocsparse_float_complex *csr_val_C, const rocsparse_int *csr_row_ptr_C, rocsparse_int *csr_col_ind_C)#
- 
rocsparse_status rocsparse_zcsrgeam(rocsparse_handle handle, rocsparse_int m, rocsparse_int n, const rocsparse_double_complex *alpha, const rocsparse_mat_descr descr_A, rocsparse_int nnz_A, const rocsparse_double_complex *csr_val_A, const rocsparse_int *csr_row_ptr_A, const rocsparse_int *csr_col_ind_A, const rocsparse_double_complex *beta, const rocsparse_mat_descr descr_B, rocsparse_int nnz_B, const rocsparse_double_complex *csr_val_B, const rocsparse_int *csr_row_ptr_B, const rocsparse_int *csr_col_ind_B, const rocsparse_mat_descr descr_C, rocsparse_double_complex *csr_val_C, const rocsparse_int *csr_row_ptr_C, rocsparse_int *csr_col_ind_C)#
- Sparse matrix sparse matrix addition using CSR storage format. - rocsparse_csrgeammultiplies the scalar \(\alpha\) with the sparse \(m \times n\) matrix \(A\), defined in CSR storage format, multiplies the scalar \(\beta\) with the sparse \(m \times n\) matrix \(B\), defined in CSR storage format, and adds both resulting matrices to obtain the sparse \(m \times n\) matrix \(C\), defined in CSR storage format, such that\[ C := \alpha \cdot A + \beta \cdot B. \]- It is assumed that - csr_row_ptr_Chas already been filled and that- csr_val_Cand- csr_col_ind_Care allocated by the user.- csr_row_ptr_Cand allocation size of- csr_col_ind_Cand- csr_val_Cis defined by the number of non-zero elements of the sparse CSR matrix C. Both can be obtained by rocsparse_csrgeam_nnz().- Example
- This example adds two CSR matrices. - // Initialize scalar multipliers float alpha = 1.0f; float beta = 1.0f; // Create matrix descriptors rocsparse_mat_descr descr_A; rocsparse_mat_descr descr_B; rocsparse_mat_descr descr_C; rocsparse_create_mat_descr(&descr_A); rocsparse_create_mat_descr(&descr_B); rocsparse_create_mat_descr(&descr_C); // Set pointer mode rocsparse_set_pointer_mode(handle, rocsparse_pointer_mode_host); // Obtain number of total non-zero entries in C and row pointers of C rocsparse_int nnz_C; hipMalloc((void**)&csr_row_ptr_C, sizeof(rocsparse_int) * (m + 1)); rocsparse_csrgeam_nnz(handle, m, n, descr_A, nnz_A, csr_row_ptr_A, csr_col_ind_A, descr_B, nnz_B, csr_row_ptr_B, csr_col_ind_B, descr_C, csr_row_ptr_C, &nnz_C); // Compute column indices and values of C hipMalloc((void**)&csr_col_ind_C, sizeof(rocsparse_int) * nnz_C); hipMalloc((void**)&csr_val_C, sizeof(float) * nnz_C); rocsparse_scsrgeam(handle, m, n, &alpha, descr_A, nnz_A, csr_val_A, csr_row_ptr_A, csr_col_ind_A, &beta, descr_B, nnz_B, csr_val_B, csr_row_ptr_B, csr_col_ind_B, descr_C, csr_val_C, csr_row_ptr_C, csr_col_ind_C); 
 - Note - Both scalars \(\alpha\) and \(beta\) have to be valid. - Note - Currently, only rocsparse_matrix_type_general is supported. - Note - This function is blocking with respect to the host. - Note - This routine does not support execution in a hipGraph context. - Parameters:
- handle – [in] handle to the rocsparse library context queue. 
- m – [in] number of rows of the sparse CSR matrix \(A\), \(B\) and \(C\). 
- n – [in] number of columns of the sparse CSR matrix \(A\), \(B\) and \(C\). 
- alpha – [in] scalar \(\alpha\). 
- descr_A – [in] descriptor of the sparse CSR matrix \(A\). Currently, only rocsparse_matrix_type_general is supported. 
- nnz_A – [in] number of non-zero entries of the sparse CSR matrix \(A\). 
- csr_val_A – [in] array of - nnz_Aelements of the sparse CSR matrix \(A\).
- csr_row_ptr_A – [in] array of - m+1elements that point to the start of every row of the sparse CSR matrix \(A\).
- csr_col_ind_A – [in] array of - nnz_Aelements containing the column indices of the sparse CSR matrix \(A\).
- beta – [in] scalar \(\beta\). 
- descr_B – [in] descriptor of the sparse CSR matrix \(B\). Currently, only rocsparse_matrix_type_general is supported. 
- nnz_B – [in] number of non-zero entries of the sparse CSR matrix \(B\). 
- csr_val_B – [in] array of - nnz_Belements of the sparse CSR matrix \(B\).
- csr_row_ptr_B – [in] array of - m+1elements that point to the start of every row of the sparse CSR matrix \(B\).
- csr_col_ind_B – [in] array of - nnz_Belements containing the column indices of the sparse CSR matrix \(B\).
- descr_C – [in] descriptor of the sparse CSR matrix \(C\). Currently, only rocsparse_matrix_type_general is supported. 
- csr_val_C – [out] array of elements of the sparse CSR matrix \(C\). 
- csr_row_ptr_C – [in] array of - m+1elements that point to the start of every row of the sparse CSR matrix \(C\).
- csr_col_ind_C – [out] array of elements containing the column indices of the sparse CSR matrix \(C\). 
 
- Return values:
- rocsparse_status_success – the operation completed successfully. 
- rocsparse_status_invalid_handle – the library context was not initialized. 
- rocsparse_status_invalid_size – - m,- n,- nnz_Aor- nnz_Bis invalid.
- rocsparse_status_invalid_pointer – - alpha,- descr_A,- csr_val_A,- csr_row_ptr_A,- csr_col_ind_A,- beta,- descr_B,- csr_val_B,- csr_row_ptr_B,- csr_col_ind_B,- descr_C,- csr_val_C,- csr_row_ptr_Cor- csr_col_ind_Cis invalid.
- rocsparse_status_not_implemented – - rocsparse_matrix_type!= rocsparse_matrix_type_general.
 
 
rocsparse_csrgemm_buffer_size()#
- 
rocsparse_status rocsparse_scsrgemm_buffer_size(rocsparse_handle handle, rocsparse_operation trans_A, rocsparse_operation trans_B, rocsparse_int m, rocsparse_int n, rocsparse_int k, const float *alpha, const rocsparse_mat_descr descr_A, rocsparse_int nnz_A, const rocsparse_int *csr_row_ptr_A, const rocsparse_int *csr_col_ind_A, const rocsparse_mat_descr descr_B, rocsparse_int nnz_B, const rocsparse_int *csr_row_ptr_B, const rocsparse_int *csr_col_ind_B, const float *beta, const rocsparse_mat_descr descr_D, rocsparse_int nnz_D, const rocsparse_int *csr_row_ptr_D, const rocsparse_int *csr_col_ind_D, rocsparse_mat_info info_C, size_t *buffer_size)#
- 
rocsparse_status rocsparse_dcsrgemm_buffer_size(rocsparse_handle handle, rocsparse_operation trans_A, rocsparse_operation trans_B, rocsparse_int m, rocsparse_int n, rocsparse_int k, const double *alpha, const rocsparse_mat_descr descr_A, rocsparse_int nnz_A, const rocsparse_int *csr_row_ptr_A, const rocsparse_int *csr_col_ind_A, const rocsparse_mat_descr descr_B, rocsparse_int nnz_B, const rocsparse_int *csr_row_ptr_B, const rocsparse_int *csr_col_ind_B, const double *beta, const rocsparse_mat_descr descr_D, rocsparse_int nnz_D, const rocsparse_int *csr_row_ptr_D, const rocsparse_int *csr_col_ind_D, rocsparse_mat_info info_C, size_t *buffer_size)#
- 
rocsparse_status rocsparse_ccsrgemm_buffer_size(rocsparse_handle handle, rocsparse_operation trans_A, rocsparse_operation trans_B, rocsparse_int m, rocsparse_int n, rocsparse_int k, const rocsparse_float_complex *alpha, const rocsparse_mat_descr descr_A, rocsparse_int nnz_A, const rocsparse_int *csr_row_ptr_A, const rocsparse_int *csr_col_ind_A, const rocsparse_mat_descr descr_B, rocsparse_int nnz_B, const rocsparse_int *csr_row_ptr_B, const rocsparse_int *csr_col_ind_B, const rocsparse_float_complex *beta, const rocsparse_mat_descr descr_D, rocsparse_int nnz_D, const rocsparse_int *csr_row_ptr_D, const rocsparse_int *csr_col_ind_D, rocsparse_mat_info info_C, size_t *buffer_size)#
- 
rocsparse_status rocsparse_zcsrgemm_buffer_size(rocsparse_handle handle, rocsparse_operation trans_A, rocsparse_operation trans_B, rocsparse_int m, rocsparse_int n, rocsparse_int k, const rocsparse_double_complex *alpha, const rocsparse_mat_descr descr_A, rocsparse_int nnz_A, const rocsparse_int *csr_row_ptr_A, const rocsparse_int *csr_col_ind_A, const rocsparse_mat_descr descr_B, rocsparse_int nnz_B, const rocsparse_int *csr_row_ptr_B, const rocsparse_int *csr_col_ind_B, const rocsparse_double_complex *beta, const rocsparse_mat_descr descr_D, rocsparse_int nnz_D, const rocsparse_int *csr_row_ptr_D, const rocsparse_int *csr_col_ind_D, rocsparse_mat_info info_C, size_t *buffer_size)#
- Sparse matrix sparse matrix multiplication using CSR storage format. - rocsparse_csrgemm_buffer_sizereturns the size of the temporary storage buffer that is required by rocsparse_csrgemm_nnz(), rocsparse_scsrgemm(), rocsparse_dcsrgemm(), rocsparse_ccsrgemm() and rocsparse_zcsrgemm(). The temporary storage buffer must be allocated by the user.- Note - Please note, that for matrix products with more than 4096 non-zero entries per row, additional temporary storage buffer is allocated by the algorithm. - Note - Please note, that for matrix products with more than 8192 intermediate products per row, additional temporary storage buffer is allocated by the algorithm. - Note - Currently, only - trans_A==- trans_B== rocsparse_operation_none is supported.- Note - Currently, only rocsparse_matrix_type_general is supported. - Note - This routine does not support execution in a hipGraph context. - Parameters:
- handle – [in] handle to the rocsparse library context queue. 
- trans_A – [in] matrix \(A\) operation type. 
- trans_B – [in] matrix \(B\) operation type. 
- m – [in] number of rows of the sparse CSR matrix \(op(A)\) and \(C\). 
- n – [in] number of columns of the sparse CSR matrix \(op(B)\) and \(C\). 
- k – [in] number of columns of the sparse CSR matrix \(op(A)\) and number of rows of the sparse CSR matrix \(op(B)\). 
- alpha – [in] scalar \(\alpha\). 
- descr_A – [in] descriptor of the sparse CSR matrix \(A\). Currently, only rocsparse_matrix_type_general is supported. 
- nnz_A – [in] number of non-zero entries of the sparse CSR matrix \(A\). 
- csr_row_ptr_A – [in] array of - m+1elements ( \(op(A) == A\),- k+1otherwise) that point to the start of every row of the sparse CSR matrix \(op(A)\).
- csr_col_ind_A – [in] array of - nnz_Aelements containing the column indices of the sparse CSR matrix \(A\).
- descr_B – [in] descriptor of the sparse CSR matrix \(B\). Currently, only rocsparse_matrix_type_general is supported. 
- nnz_B – [in] number of non-zero entries of the sparse CSR matrix \(B\). 
- csr_row_ptr_B – [in] array of - k+1elements ( \(op(B) == B\),- m+1otherwise) that point to the start of every row of the sparse CSR matrix \(op(B)\).
- csr_col_ind_B – [in] array of - nnz_Belements containing the column indices of the sparse CSR matrix \(B\).
- beta – [in] scalar \(\beta\). 
- descr_D – [in] descriptor of the sparse CSR matrix \(D\). Currently, only rocsparse_matrix_type_general is supported. 
- nnz_D – [in] number of non-zero entries of the sparse CSR matrix \(D\). 
- csr_row_ptr_D – [in] array of - m+1elements that point to the start of every row of the sparse CSR matrix \(D\).
- csr_col_ind_D – [in] array of - nnz_Delements containing the column indices of the sparse CSR matrix \(D\).
- info_C – [inout] structure that holds meta data for the sparse CSR matrix \(C\). 
- buffer_size – [out] number of bytes of the temporary storage buffer required by rocsparse_csrgemm_nnz(), rocsparse_scsrgemm(), rocsparse_dcsrgemm(), rocsparse_ccsrgemm() and rocsparse_zcsrgemm(). 
 
- Return values:
- rocsparse_status_success – the operation completed successfully. 
- rocsparse_status_invalid_handle – the library context was not initialized. 
- rocsparse_status_invalid_size – - m,- n,- k,- nnz_A,- nnz_Bor- nnz_Dis invalid.
- rocsparse_status_invalid_pointer – - alphaand- betaare invalid,- descr_A,- csr_row_ptr_A,- csr_col_ind_A,- descr_B,- csr_row_ptr_Bor- csr_col_ind_Bare invalid if- alphais valid,- descr_D,- csr_row_ptr_Dor- csr_col_ind_Dis invalid if- betais valid,- info_Cor- buffer_sizeis invalid.
- rocsparse_status_not_implemented – - trans_A!= rocsparse_operation_none,- trans_B!= rocsparse_operation_none, or- rocsparse_matrix_type!= rocsparse_matrix_type_general.
 
 
rocsparse_csrgemm_nnz()#
- 
rocsparse_status rocsparse_csrgemm_nnz(rocsparse_handle handle, rocsparse_operation trans_A, rocsparse_operation trans_B, rocsparse_int m, rocsparse_int n, rocsparse_int k, const rocsparse_mat_descr descr_A, rocsparse_int nnz_A, const rocsparse_int *csr_row_ptr_A, const rocsparse_int *csr_col_ind_A, const rocsparse_mat_descr descr_B, rocsparse_int nnz_B, const rocsparse_int *csr_row_ptr_B, const rocsparse_int *csr_col_ind_B, const rocsparse_mat_descr descr_D, rocsparse_int nnz_D, const rocsparse_int *csr_row_ptr_D, const rocsparse_int *csr_col_ind_D, const rocsparse_mat_descr descr_C, rocsparse_int *csr_row_ptr_C, rocsparse_int *nnz_C, const rocsparse_mat_info info_C, void *temp_buffer)#
- Sparse matrix sparse matrix multiplication using CSR storage format. - rocsparse_csrgemm_nnzcomputes the total CSR non-zero elements and the CSR row offsets, that point to the start of every row of the sparse CSR matrix, of the resulting multiplied matrix C. It is assumed that- csr_row_ptr_Chas been allocated with size- m+1. The required buffer size can be obtained by rocsparse_scsrgemm_buffer_size(), rocsparse_dcsrgemm_buffer_size(), rocsparse_ccsrgemm_buffer_size() and rocsparse_zcsrgemm_buffer_size(), respectively.- Note - Please note, that for matrix products with more than 8192 intermediate products per row, additional temporary storage buffer is allocated by the algorithm. - Note - This function supports unsorted CSR matrices as input, while output will be sorted. Please note that matrices B and D can only be unsorted up to 8192 intermediate products per row. If this number is exceeded, rocsparse_status_requires_sorted_storage will be returned. - Note - This function is blocking with respect to the host. - Note - Currently, only - trans_A==- trans_B== rocsparse_operation_none is supported.- Note - Currently, only rocsparse_matrix_type_general is supported. - Note - This routine does not support execution in a hipGraph context. - Parameters:
- handle – [in] handle to the rocsparse library context queue. 
- trans_A – [in] matrix \(A\) operation type. 
- trans_B – [in] matrix \(B\) operation type. 
- m – [in] number of rows of the sparse CSR matrix \(op(A)\) and \(C\). 
- n – [in] number of columns of the sparse CSR matrix \(op(B)\) and \(C\). 
- k – [in] number of columns of the sparse CSR matrix \(op(A)\) and number of rows of the sparse CSR matrix \(op(B)\). 
- descr_A – [in] descriptor of the sparse CSR matrix \(A\). Currently, only rocsparse_matrix_type_general is supported. 
- nnz_A – [in] number of non-zero entries of the sparse CSR matrix \(A\). 
- csr_row_ptr_A – [in] array of - m+1elements ( \(op(A) == A\),- k+1otherwise) that point to the start of every row of the sparse CSR matrix \(op(A)\).
- csr_col_ind_A – [in] array of - nnz_Aelements containing the column indices of the sparse CSR matrix \(A\).
- descr_B – [in] descriptor of the sparse CSR matrix \(B\). Currently, only rocsparse_matrix_type_general is supported. 
- nnz_B – [in] number of non-zero entries of the sparse CSR matrix \(B\). 
- csr_row_ptr_B – [in] array of - k+1elements ( \(op(B) == B\),- m+1otherwise) that point to the start of every row of the sparse CSR matrix \(op(B)\).
- csr_col_ind_B – [in] array of - nnz_Belements containing the column indices of the sparse CSR matrix \(B\).
- descr_D – [in] descriptor of the sparse CSR matrix \(D\). Currently, only rocsparse_matrix_type_general is supported. 
- nnz_D – [in] number of non-zero entries of the sparse CSR matrix \(D\). 
- csr_row_ptr_D – [in] array of - m+1elements that point to the start of every row of the sparse CSR matrix \(D\).
- csr_col_ind_D – [in] array of - nnz_Delements containing the column indices of the sparse CSR matrix \(D\).
- descr_C – [in] descriptor of the sparse CSR matrix \(C\). Currently, only rocsparse_matrix_type_general is supported. 
- csr_row_ptr_C – [out] array of - m+1elements that point to the start of every row of the sparse CSR matrix \(C\).
- nnz_C – [out] pointer to the number of non-zero entries of the sparse CSR matrix \(C\). 
- info_C – [in] structure that holds meta data for the sparse CSR matrix \(C\). 
- temp_buffer – [in] temporary storage buffer allocated by the user, size is returned by rocsparse_scsrgemm_buffer_size(), rocsparse_dcsrgemm_buffer_size(), rocsparse_ccsrgemm_buffer_size() or rocsparse_zcsrgemm_buffer_size(). 
 
- Return values:
- rocsparse_status_success – the operation completed successfully. 
- rocsparse_status_invalid_handle – the library context was not initialized. 
- rocsparse_status_invalid_size – - m,- n,- k,- nnz_A,- nnz_Bor- nnz_Dis invalid.
- rocsparse_status_invalid_pointer – - descr_A,- csr_row_ptr_A,- csr_col_ind_A,- descr_B,- csr_row_ptr_B,- csr_col_ind_B,- descr_D,- csr_row_ptr_D,- csr_col_ind_D,- descr_C,- csr_row_ptr_C,- nnz_C,- info_Cor- temp_bufferis invalid.
- rocsparse_status_memory_error – additional buffer for long rows could not be allocated. 
- rocsparse_status_not_implemented – - trans_A!= rocsparse_operation_none,- trans_B!= rocsparse_operation_none, or- rocsparse_matrix_type!= rocsparse_matrix_type_general.
 
 
rocsparse_csrgemm_symbolic()#
- 
rocsparse_status rocsparse_csrgemm_symbolic(rocsparse_handle handle, rocsparse_operation trans_A, rocsparse_operation trans_B, rocsparse_int m, rocsparse_int n, rocsparse_int k, const rocsparse_mat_descr descr_A, rocsparse_int nnz_A, const rocsparse_int *csr_row_ptr_A, const rocsparse_int *csr_col_ind_A, const rocsparse_mat_descr descr_B, rocsparse_int nnz_B, const rocsparse_int *csr_row_ptr_B, const rocsparse_int *csr_col_ind_B, const rocsparse_mat_descr descr_D, rocsparse_int nnz_D, const rocsparse_int *csr_row_ptr_D, const rocsparse_int *csr_col_ind_D, const rocsparse_mat_descr descr_C, rocsparse_int nnz_C, const rocsparse_int *csr_row_ptr_C, rocsparse_int *csr_col_ind_C, const rocsparse_mat_info info_C, void *temp_buffer)#
- Sparse matrix sparse matrix symbolic multiplication using CSR storage format. - rocsparse_csrgemm_symbolicmultiplies two sparsity patterns and add an extra one:\[ opA \cdot op(B) + D \]with \(m \times k\) matrix \(A\), defined in CSR storage format, the sparse \(k \times n\) matrix \(B\), defined in CSR storage format and the sparse \(m \times n\) matrix \(D\). The * final result is stored in the sparse \(m \times n\) matrix \(C\), defined in CSR storage format, such that\[ C := op(A) \cdot op(B) + D, \]with\[\begin{split} op(A) = \left\{ \begin{array}{ll} A, & \text{if trans_A == rocsparse_operation_none} \\ A^T, & \text{if trans_A == rocsparse_operation_transpose} \\ A^H, & \text{if trans_A == rocsparse_operation_conjugate_transpose} \end{array} \right. \end{split}\]and\[\begin{split} op(B) = \left\{ \begin{array}{ll} B, & \text{if trans_B == rocsparse_operation_none} \\ B^T, & \text{if trans_B == rocsparse_operation_transpose} \\ B^H, & \text{if trans_B == rocsparse_operation_conjugate_transpose} \end{array} \right. \end{split}\]- It is assumed that - csr_row_ptr_Chas already been filled and that and- csr_col_ind_Cis allocated by the user.- csr_row_ptr_Cand allocation size of- csr_col_ind_Cis defined by the number of non-zero elements of the sparse CSR matrix C. Both can be obtained by rocsparse_csrgemm_nnz(). The required buffer size for the computation can be obtained by rocsparse_scsrgemm_buffer_size(), rocsparse_dcsrgemm_buffer_size(), rocsparse_ccsrgemm_buffer_size() and rocsparse_zcsrgemm_buffer_size(), respectively.- Example
- This example multiplies symbolically two CSR matrices and adds the result to another CSR matrix. - // Initialize scalar multipliers float alpha = 2.0f; float beta = 1.0f; // Create matrix descriptors rocsparse_mat_descr descr_A; rocsparse_mat_descr descr_B; rocsparse_mat_descr descr_C; rocsparse_mat_descr descr_D; rocsparse_create_mat_descr(&descr_A); rocsparse_create_mat_descr(&descr_B); rocsparse_create_mat_descr(&descr_C); rocsparse_create_mat_descr(&descr_D); // Create matrix info structure rocsparse_mat_info info_C; rocsparse_create_mat_info(&info_C); // Set pointer mode rocsparse_set_pointer_mode(handle, rocsparse_pointer_mode_host); // Query rocsparse for the required buffer size size_t buffer_size; rocsparse_scsrgemm_buffer_size(handle, rocsparse_operation_none, rocsparse_operation_none, m, n, k, &alpha, descr_A, nnz_A, csr_row_ptr_A, csr_col_ind_A, descr_B, nnz_B, csr_row_ptr_B, csr_col_ind_B, &beta, descr_D, nnz_D, csr_row_ptr_D, csr_col_ind_D, info_C, &buffer_size); // Allocate buffer void* buffer; hipMalloc(&buffer, buffer_size); // Obtain number of total non-zero entries in C and row pointers of C rocsparse_int nnz_C; hipMalloc((void**)&csr_row_ptr_C, sizeof(rocsparse_int) * (m + 1)); rocsparse_csrgemm_nnz(handle, rocsparse_operation_none, rocsparse_operation_none, m, n, k, descr_A, nnz_A, csr_row_ptr_A, csr_col_ind_A, descr_B, nnz_B, csr_row_ptr_B, csr_col_ind_B, descr_D, nnz_D, csr_row_ptr_D, csr_col_ind_D, descr_C, csr_row_ptr_C, &nnz_C, info_C, buffer); // Compute column indices of C hipMalloc((void**)&csr_col_ind_C, sizeof(rocsparse_int) * nnz_C); rocsparse_csrgemm_symbolic(handle, rocsparse_operation_none, rocsparse_operation_none, m, n, k, descr_A, nnz_A, csr_row_ptr_A, csr_col_ind_A, descr_B, nnz_B, csr_row_ptr_B, csr_col_ind_B, descr_D, nnz_D, csr_row_ptr_D, csr_col_ind_D, descr_C, nnz_C, csr_row_ptr_C, csr_col_ind_C, info_C, buffer); 
 - Note - Currently, only - trans_A== rocsparse_operation_none is supported.- Note - Currently, only - trans_B== rocsparse_operation_none is supported.- Note - Currently, only rocsparse_matrix_type_general is supported. - Note - Please note, that for matrix products with more than 4096 non-zero entries per row, additional temporary storage buffer is allocated by the algorithm. - Note - This function is blocking with respect to the host. - Note - This routine does not support execution in a hipGraph context. - Parameters:
- handle – [in] handle to the rocsparse library context queue. 
- trans_A – [in] matrix \(A\) operation type. 
- trans_B – [in] matrix \(B\) operation type. 
- m – [in] number of rows of the sparse CSR matrix \(op(A)\) and \(C\). 
- n – [in] number of columns of the sparse CSR matrix \(op(B)\) and \(C\). 
- k – [in] number of columns of the sparse CSR matrix \(op(A)\) and number of rows of the sparse CSR matrix \(op(B)\). 
- descr_A – [in] descriptor of the sparse CSR matrix \(A\). Currently, only rocsparse_matrix_type_general is supported. 
- nnz_A – [in] number of non-zero entries of the sparse CSR matrix \(A\). 
- csr_row_ptr_A – [in] array of - m+1elements ( \(op(A) == A\),- k+1otherwise) that point to the start of every row of the sparse CSR matrix \(op(A)\).
- csr_col_ind_A – [in] array of - nnz_Aelements containing the column indices of the sparse CSR matrix \(A\).
- descr_B – [in] descriptor of the sparse CSR matrix \(B\). Currently, only rocsparse_matrix_type_general is supported. 
- nnz_B – [in] number of non-zero entries of the sparse CSR matrix \(B\). 
- csr_row_ptr_B – [in] array of - k+1elements ( \(op(B) == B\),- m+1otherwise) that point to the start of every row of the sparse CSR matrix \(op(B)\).
- csr_col_ind_B – [in] array of - nnz_Belements containing the column indices of the sparse CSR matrix \(B\).
- descr_D – [in] descriptor of the sparse CSR matrix \(D\). Currently, only rocsparse_matrix_type_general is supported. 
- nnz_D – [in] number of non-zero entries of the sparse CSR matrix \(D\). 
- csr_row_ptr_D – [in] array of - m+1elements that point to the start of every row of the sparse CSR matrix \(D\).
- csr_col_ind_D – [in] array of - nnz_Delements containing the column indices of the sparse CSR matrix \(D\).
- descr_C – [in] descriptor of the sparse CSR matrix \(C\). Currently, only rocsparse_matrix_type_general is supported. 
- nnz_C – [in] number of non-zero entries of the sparse CSR matrix \(C\). 
- csr_row_ptr_C – [in] array of - m+1elements that point to the start of every row of the sparse CSR matrix \(C\).
- csr_col_ind_C – [out] array of - nnz_Celements containing the column indices of the sparse CSR matrix \(C\).
- info_C – [in] structure that holds meta data for the sparse CSR matrix \(C\). 
- temp_buffer – [in] temporary storage buffer allocated by the user, size is returned by rocsparse_scsrgemm_buffer_size(), rocsparse_dcsrgemm_buffer_size(), rocsparse_ccsrgemm_buffer_size() or rocsparse_zcsrgemm_buffer_size(). 
 
- Return values:
- rocsparse_status_success – the operation completed successfully. 
- rocsparse_status_invalid_handle – the library context was not initialized. 
- rocsparse_status_invalid_size – - m,- n,- k,- nnz_A,- nnz_Bor- nnz_Dis invalid.
- rocsparse_status_invalid_pointer – - descr_A,- csr_row_ptr_A,- csr_col_ind_A,- descr_B,- csr_row_ptr_Bor- csr_col_ind_B,- descr_D,- csr_row_ptr_D,- csr_col_ind_D- csr_row_ptr_C,- csr_col_ind_C,- info_Cor- temp_bufferis invalid.
- rocsparse_status_memory_error – additional buffer for long rows could not be allocated. 
- rocsparse_status_not_implemented – - trans_A!= rocsparse_operation_none,- trans_B!= rocsparse_operation_none, or- rocsparse_matrix_type!= rocsparse_matrix_type_general.
 
 
rocsparse_csrgemm()#
- 
rocsparse_status rocsparse_scsrgemm(rocsparse_handle handle, rocsparse_operation trans_A, rocsparse_operation trans_B, rocsparse_int m, rocsparse_int n, rocsparse_int k, const float *alpha, const rocsparse_mat_descr descr_A, rocsparse_int nnz_A, const float *csr_val_A, const rocsparse_int *csr_row_ptr_A, const rocsparse_int *csr_col_ind_A, const rocsparse_mat_descr descr_B, rocsparse_int nnz_B, const float *csr_val_B, const rocsparse_int *csr_row_ptr_B, const rocsparse_int *csr_col_ind_B, const float *beta, const rocsparse_mat_descr descr_D, rocsparse_int nnz_D, const float *csr_val_D, const rocsparse_int *csr_row_ptr_D, const rocsparse_int *csr_col_ind_D, const rocsparse_mat_descr descr_C, float *csr_val_C, const rocsparse_int *csr_row_ptr_C, rocsparse_int *csr_col_ind_C, const rocsparse_mat_info info_C, void *temp_buffer)#
- 
rocsparse_status rocsparse_dcsrgemm(rocsparse_handle handle, rocsparse_operation trans_A, rocsparse_operation trans_B, rocsparse_int m, rocsparse_int n, rocsparse_int k, const double *alpha, const rocsparse_mat_descr descr_A, rocsparse_int nnz_A, const double *csr_val_A, const rocsparse_int *csr_row_ptr_A, const rocsparse_int *csr_col_ind_A, const rocsparse_mat_descr descr_B, rocsparse_int nnz_B, const double *csr_val_B, const rocsparse_int *csr_row_ptr_B, const rocsparse_int *csr_col_ind_B, const double *beta, const rocsparse_mat_descr descr_D, rocsparse_int nnz_D, const double *csr_val_D, const rocsparse_int *csr_row_ptr_D, const rocsparse_int *csr_col_ind_D, const rocsparse_mat_descr descr_C, double *csr_val_C, const rocsparse_int *csr_row_ptr_C, rocsparse_int *csr_col_ind_C, const rocsparse_mat_info info_C, void *temp_buffer)#
- 
rocsparse_status rocsparse_ccsrgemm(rocsparse_handle handle, rocsparse_operation trans_A, rocsparse_operation trans_B, rocsparse_int m, rocsparse_int n, rocsparse_int k, const rocsparse_float_complex *alpha, const rocsparse_mat_descr descr_A, rocsparse_int nnz_A, const rocsparse_float_complex *csr_val_A, const rocsparse_int *csr_row_ptr_A, const rocsparse_int *csr_col_ind_A, const rocsparse_mat_descr descr_B, rocsparse_int nnz_B, const rocsparse_float_complex *csr_val_B, const rocsparse_int *csr_row_ptr_B, const rocsparse_int *csr_col_ind_B, const rocsparse_float_complex *beta, const rocsparse_mat_descr descr_D, rocsparse_int nnz_D, const rocsparse_float_complex *csr_val_D, const rocsparse_int *csr_row_ptr_D, const rocsparse_int *csr_col_ind_D, const rocsparse_mat_descr descr_C, rocsparse_float_complex *csr_val_C, const rocsparse_int *csr_row_ptr_C, rocsparse_int *csr_col_ind_C, const rocsparse_mat_info info_C, void *temp_buffer)#
- 
rocsparse_status rocsparse_zcsrgemm(rocsparse_handle handle, rocsparse_operation trans_A, rocsparse_operation trans_B, rocsparse_int m, rocsparse_int n, rocsparse_int k, const rocsparse_double_complex *alpha, const rocsparse_mat_descr descr_A, rocsparse_int nnz_A, const rocsparse_double_complex *csr_val_A, const rocsparse_int *csr_row_ptr_A, const rocsparse_int *csr_col_ind_A, const rocsparse_mat_descr descr_B, rocsparse_int nnz_B, const rocsparse_double_complex *csr_val_B, const rocsparse_int *csr_row_ptr_B, const rocsparse_int *csr_col_ind_B, const rocsparse_double_complex *beta, const rocsparse_mat_descr descr_D, rocsparse_int nnz_D, const rocsparse_double_complex *csr_val_D, const rocsparse_int *csr_row_ptr_D, const rocsparse_int *csr_col_ind_D, const rocsparse_mat_descr descr_C, rocsparse_double_complex *csr_val_C, const rocsparse_int *csr_row_ptr_C, rocsparse_int *csr_col_ind_C, const rocsparse_mat_info info_C, void *temp_buffer)#
- Sparse matrix sparse matrix multiplication using CSR storage format. - rocsparse_csrgemmmultiplies the scalar \(\alpha\) with the sparse \(m \times k\) matrix \(A\), defined in CSR storage format, and the sparse \(k \times n\) matrix \(B\), defined in CSR storage format, and adds the result to the sparse \(m \times n\) matrix \(D\) that is multiplied by \(\beta\). The final result is stored in the sparse \(m \times n\) matrix \(C\), defined in CSR storage format, such that\[ C := \alpha \cdot op(A) \cdot op(B) + \beta \cdot D, \]with\[\begin{split} op(A) = \left\{ \begin{array}{ll} A, & \text{if trans_A == rocsparse_operation_none} \\ A^T, & \text{if trans_A == rocsparse_operation_transpose} \\ A^H, & \text{if trans_A == rocsparse_operation_conjugate_transpose} \end{array} \right. \end{split}\]and\[\begin{split} op(B) = \left\{ \begin{array}{ll} B, & \text{if trans_B == rocsparse_operation_none} \\ B^T, & \text{if trans_B == rocsparse_operation_transpose} \\ B^H, & \text{if trans_B == rocsparse_operation_conjugate_transpose} \end{array} \right. \end{split}\]- It is assumed that - csr_row_ptr_Chas already been filled and that- csr_val_Cand- csr_col_ind_Care allocated by the user.- csr_row_ptr_Cand allocation size of- csr_col_ind_Cand- csr_val_Cis defined by the number of non-zero elements of the sparse CSR matrix C. Both can be obtained by rocsparse_csrgemm_nnz(). The required buffer size for the computation can be obtained by rocsparse_scsrgemm_buffer_size(), rocsparse_dcsrgemm_buffer_size(), rocsparse_ccsrgemm_buffer_size() and rocsparse_zcsrgemm_buffer_size(), respectively.- Example
- This example multiplies two CSR matrices with a scalar alpha and adds the result to another CSR matrix. - // Initialize scalar multipliers float alpha = 2.0f; float beta = 1.0f; // Create matrix descriptors rocsparse_mat_descr descr_A; rocsparse_mat_descr descr_B; rocsparse_mat_descr descr_C; rocsparse_mat_descr descr_D; rocsparse_create_mat_descr(&descr_A); rocsparse_create_mat_descr(&descr_B); rocsparse_create_mat_descr(&descr_C); rocsparse_create_mat_descr(&descr_D); // Create matrix info structure rocsparse_mat_info info_C; rocsparse_create_mat_info(&info_C); // Set pointer mode rocsparse_set_pointer_mode(handle, rocsparse_pointer_mode_host); // Query rocsparse for the required buffer size size_t buffer_size; rocsparse_scsrgemm_buffer_size(handle, rocsparse_operation_none, rocsparse_operation_none, m, n, k, &alpha, descr_A, nnz_A, csr_row_ptr_A, csr_col_ind_A, descr_B, nnz_B, csr_row_ptr_B, csr_col_ind_B, &beta, descr_D, nnz_D, csr_row_ptr_D, csr_col_ind_D, info_C, &buffer_size); // Allocate buffer void* buffer; hipMalloc(&buffer, buffer_size); // Obtain number of total non-zero entries in C and row pointers of C rocsparse_int nnz_C; hipMalloc((void**)&csr_row_ptr_C, sizeof(rocsparse_int) * (m + 1)); rocsparse_csrgemm_nnz(handle, rocsparse_operation_none, rocsparse_operation_none, m, n, k, descr_A, nnz_A, csr_row_ptr_A, csr_col_ind_A, descr_B, nnz_B, csr_row_ptr_B, csr_col_ind_B, descr_D, nnz_D, csr_row_ptr_D, csr_col_ind_D, descr_C, csr_row_ptr_C, &nnz_C, info_C, buffer); // Compute column indices and values of C hipMalloc((void**)&csr_col_ind_C, sizeof(rocsparse_int) * nnz_C); hipMalloc((void**)&csr_val_C, sizeof(float) * nnz_C); rocsparse_scsrgemm(handle, rocsparse_operation_none, rocsparse_operation_none, m, n, k, &alpha, descr_A, nnz_A, csr_val_A, csr_row_ptr_A, csr_col_ind_A, descr_B, nnz_B, csr_val_B, csr_row_ptr_B, csr_col_ind_B, &beta, descr_D, nnz_D, csr_val_D, csr_row_ptr_D, csr_col_ind_D, descr_C, csr_val_C, csr_row_ptr_C, csr_col_ind_C, info_C, buffer); 
 - Note - This function does not produce deterministic results. - Note - If \(\alpha == 0\), then \(C = \beta \cdot D\) will be computed. - Note - If \(\beta == 0\), then \(C = \alpha \cdot op(A) \cdot op(B)\) will be computed. - Note - \(\alpha == beta == 0\) is invalid. - Note - Currently, only - trans_A== rocsparse_operation_none is supported.- Note - Currently, only - trans_B== rocsparse_operation_none is supported.- Note - Currently, only rocsparse_matrix_type_general is supported. - Note - Please note, that for matrix products with more than 4096 non-zero entries per row, additional temporary storage buffer is allocated by the algorithm. - Note - This function supports unsorted CSR matrices as input, while output will be sorted. Please note that matrices B and D can only be unsorted up to 4096 non-zero entries per row. If this number is exceeded, rocsparse_status_requires_sorted_storage will be returned. - Note - This function is blocking with respect to the host. - Note - This routine does not support execution in a hipGraph context. - Parameters:
- handle – [in] handle to the rocsparse library context queue. 
- trans_A – [in] matrix \(A\) operation type. 
- trans_B – [in] matrix \(B\) operation type. 
- m – [in] number of rows of the sparse CSR matrix \(op(A)\) and \(C\). 
- n – [in] number of columns of the sparse CSR matrix \(op(B)\) and \(C\). 
- k – [in] number of columns of the sparse CSR matrix \(op(A)\) and number of rows of the sparse CSR matrix \(op(B)\). 
- alpha – [in] scalar \(\alpha\). 
- descr_A – [in] descriptor of the sparse CSR matrix \(A\). Currently, only rocsparse_matrix_type_general is supported. 
- nnz_A – [in] number of non-zero entries of the sparse CSR matrix \(A\). 
- csr_val_A – [in] array of - nnz_Aelements of the sparse CSR matrix \(A\).
- csr_row_ptr_A – [in] array of - m+1elements ( \(op(A) == A\),- k+1otherwise) that point to the start of every row of the sparse CSR matrix \(op(A)\).
- csr_col_ind_A – [in] array of - nnz_Aelements containing the column indices of the sparse CSR matrix \(A\).
- descr_B – [in] descriptor of the sparse CSR matrix \(B\). Currently, only rocsparse_matrix_type_general is supported. 
- nnz_B – [in] number of non-zero entries of the sparse CSR matrix \(B\). 
- csr_val_B – [in] array of - nnz_Belements of the sparse CSR matrix \(B\).
- csr_row_ptr_B – [in] array of - k+1elements ( \(op(B) == B\),- m+1otherwise) that point to the start of every row of the sparse CSR matrix \(op(B)\).
- csr_col_ind_B – [in] array of - nnz_Belements containing the column indices of the sparse CSR matrix \(B\).
- beta – [in] scalar \(\beta\). 
- descr_D – [in] descriptor of the sparse CSR matrix \(D\). Currently, only rocsparse_matrix_type_general is supported. 
- nnz_D – [in] number of non-zero entries of the sparse CSR matrix \(D\). 
- csr_val_D – [in] array of - nnz_Delements of the sparse CSR matrix \(D\).
- csr_row_ptr_D – [in] array of - m+1elements that point to the start of every row of the sparse CSR matrix \(D\).
- csr_col_ind_D – [in] array of - nnz_Delements containing the column indices of the sparse CSR matrix \(D\).
- descr_C – [in] descriptor of the sparse CSR matrix \(C\). Currently, only rocsparse_matrix_type_general is supported. 
- csr_val_C – [out] array of - nnz_Celements of the sparse CSR matrix \(C\).
- csr_row_ptr_C – [in] array of - m+1elements that point to the start of every row of the sparse CSR matrix \(C\).
- csr_col_ind_C – [out] array of - nnz_Celements containing the column indices of the sparse CSR matrix \(C\).
- info_C – [in] structure that holds meta data for the sparse CSR matrix \(C\). 
- temp_buffer – [in] temporary storage buffer allocated by the user, size is returned by rocsparse_scsrgemm_buffer_size(), rocsparse_dcsrgemm_buffer_size(), rocsparse_ccsrgemm_buffer_size() or rocsparse_zcsrgemm_buffer_size(). 
 
- Return values:
- rocsparse_status_success – the operation completed successfully. 
- rocsparse_status_invalid_handle – the library context was not initialized. 
- rocsparse_status_invalid_size – - m,- n,- k,- nnz_A,- nnz_Bor- nnz_Dis invalid.
- rocsparse_status_invalid_pointer – - alphaand- betaare invalid,- descr_A,- csr_val_A,- csr_row_ptr_A,- csr_col_ind_A,- descr_B,- csr_val_B,- csr_row_ptr_Bor- csr_col_ind_Bare invalid if- alphais valid,- descr_D,- csr_val_D,- csr_row_ptr_Dor- csr_col_ind_Dis invalid if- betais valid,- csr_val_C,- csr_row_ptr_C,- csr_col_ind_C,- info_Cor- temp_bufferis invalid.
- rocsparse_status_memory_error – additional buffer for long rows could not be allocated. 
- rocsparse_status_not_implemented – - trans_A!= rocsparse_operation_none,- trans_B!= rocsparse_operation_none, or- rocsparse_matrix_type!= rocsparse_matrix_type_general.
 
 
rocsparse_csrgemm_numeric()#
- 
rocsparse_status rocsparse_scsrgemm_numeric(rocsparse_handle handle, rocsparse_operation trans_A, rocsparse_operation trans_B, rocsparse_int m, rocsparse_int n, rocsparse_int k, const float *alpha, const rocsparse_mat_descr descr_A, rocsparse_int nnz_A, const float *csr_val_A, const rocsparse_int *csr_row_ptr_A, const rocsparse_int *csr_col_ind_A, const rocsparse_mat_descr descr_B, rocsparse_int nnz_B, const float *csr_val_B, const rocsparse_int *csr_row_ptr_B, const rocsparse_int *csr_col_ind_B, const float *beta, const rocsparse_mat_descr descr_D, rocsparse_int nnz_D, const float *csr_val_D, const rocsparse_int *csr_row_ptr_D, const rocsparse_int *csr_col_ind_D, const rocsparse_mat_descr descr_C, rocsparse_int nnz_C, float *csr_val_C, const rocsparse_int *csr_row_ptr_C, const rocsparse_int *csr_col_ind_C, const rocsparse_mat_info info_C, void *temp_buffer)#
- 
rocsparse_status rocsparse_dcsrgemm_numeric(rocsparse_handle handle, rocsparse_operation trans_A, rocsparse_operation trans_B, rocsparse_int m, rocsparse_int n, rocsparse_int k, const double *alpha, const rocsparse_mat_descr descr_A, rocsparse_int nnz_A, const double *csr_val_A, const rocsparse_int *csr_row_ptr_A, const rocsparse_int *csr_col_ind_A, const rocsparse_mat_descr descr_B, rocsparse_int nnz_B, const double *csr_val_B, const rocsparse_int *csr_row_ptr_B, const rocsparse_int *csr_col_ind_B, const double *beta, const rocsparse_mat_descr descr_D, rocsparse_int nnz_D, const double *csr_val_D, const rocsparse_int *csr_row_ptr_D, const rocsparse_int *csr_col_ind_D, const rocsparse_mat_descr descr_C, rocsparse_int nnz_C, double *csr_val_C, const rocsparse_int *csr_row_ptr_C, const rocsparse_int *csr_col_ind_C, const rocsparse_mat_info info_C, void *temp_buffer)#
- 
rocsparse_status rocsparse_ccsrgemm_numeric(rocsparse_handle handle, rocsparse_operation trans_A, rocsparse_operation trans_B, rocsparse_int m, rocsparse_int n, rocsparse_int k, const rocsparse_float_complex *alpha, const rocsparse_mat_descr descr_A, rocsparse_int nnz_A, const rocsparse_float_complex *csr_val_A, const rocsparse_int *csr_row_ptr_A, const rocsparse_int *csr_col_ind_A, const rocsparse_mat_descr descr_B, rocsparse_int nnz_B, const rocsparse_float_complex *csr_val_B, const rocsparse_int *csr_row_ptr_B, const rocsparse_int *csr_col_ind_B, const rocsparse_float_complex *beta, const rocsparse_mat_descr descr_D, rocsparse_int nnz_D, const rocsparse_float_complex *csr_val_D, const rocsparse_int *csr_row_ptr_D, const rocsparse_int *csr_col_ind_D, const rocsparse_mat_descr descr_C, rocsparse_int nnz_C, rocsparse_float_complex *csr_val_C, const rocsparse_int *csr_row_ptr_C, const rocsparse_int *csr_col_ind_C, const rocsparse_mat_info info_C, void *temp_buffer)#
- 
rocsparse_status rocsparse_zcsrgemm_numeric(rocsparse_handle handle, rocsparse_operation trans_A, rocsparse_operation trans_B, rocsparse_int m, rocsparse_int n, rocsparse_int k, const rocsparse_double_complex *alpha, const rocsparse_mat_descr descr_A, rocsparse_int nnz_A, const rocsparse_double_complex *csr_val_A, const rocsparse_int *csr_row_ptr_A, const rocsparse_int *csr_col_ind_A, const rocsparse_mat_descr descr_B, rocsparse_int nnz_B, const rocsparse_double_complex *csr_val_B, const rocsparse_int *csr_row_ptr_B, const rocsparse_int *csr_col_ind_B, const rocsparse_double_complex *beta, const rocsparse_mat_descr descr_D, rocsparse_int nnz_D, const rocsparse_double_complex *csr_val_D, const rocsparse_int *csr_row_ptr_D, const rocsparse_int *csr_col_ind_D, const rocsparse_mat_descr descr_C, rocsparse_int nnz_C, rocsparse_double_complex *csr_val_C, const rocsparse_int *csr_row_ptr_C, const rocsparse_int *csr_col_ind_C, const rocsparse_mat_info info_C, void *temp_buffer)#
- Sparse matrix sparse matrix numeric multiplication using CSR storage format. - rocsparse_csrgemm_numericmultiplies the scalar \(\alpha\) with the sparse \(m \times k\) matrix \(A\), defined in CSR storage format, and the sparse \(k \times n\) matrix \(B\), defined in CSR storage format, and adds the result to the sparse \(m \times n\) matrix \(D\) that is multiplied by \(\beta\). The final result is stored in the sparse \(m \times n\) matrix \(C\), predefined in CSR storage format, such that\[ C := \alpha \cdot op(A) \cdot op(B) + \beta \cdot D, \]with\[\begin{split} op(A) = \left\{ \begin{array}{ll} A, & \text{if trans_A == rocsparse_operation_none} \\ A^T, & \text{if trans_A == rocsparse_operation_transpose} \\ A^H, & \text{if trans_A == rocsparse_operation_conjugate_transpose} \end{array} \right. \end{split}\]and\[\begin{split} op(B) = \left\{ \begin{array}{ll} B, & \text{if trans_B == rocsparse_operation_none} \\ B^T, & \text{if trans_B == rocsparse_operation_transpose} \\ B^H, & \text{if trans_B == rocsparse_operation_conjugate_transpose} \end{array} \right. \end{split}\]- The symbolic part of the csr matrix C can be obtained by rocsparse_csrgemm_symbolic(). It is assumed that - csr_row_ptr_Cand- csr_col_ind_Chave already been filled and that- csr_val_Cis allocated by the user.- csr_row_ptr_Cand allocation size of- csr_col_ind_Cand- csr_val_Cis defined by the number of non-zero elements of the sparse CSR matrix C. Both can be obtained by rocsparse_csrgemm_nnz(). The required buffer size for the computation can be obtained by rocsparse_scsrgemm_buffer_size(), rocsparse_dcsrgemm_buffer_size(), rocsparse_ccsrgemm_buffer_size() and rocsparse_zcsrgemm_buffer_size(), respectively.- Example
- This example multiplies two CSR matrices with a scalar alpha and adds the result to another CSR matrix. - // Initialize scalar multipliers float alpha = 2.0f; float beta = 1.0f; // Create matrix descriptors rocsparse_mat_descr descr_A; rocsparse_mat_descr descr_B; rocsparse_mat_descr descr_C; rocsparse_mat_descr descr_D; rocsparse_create_mat_descr(&descr_A); rocsparse_create_mat_descr(&descr_B); rocsparse_create_mat_descr(&descr_C); rocsparse_create_mat_descr(&descr_D); // Create matrix info structure rocsparse_mat_info info_C; rocsparse_create_mat_info(&info_C); // Set pointer mode rocsparse_set_pointer_mode(handle, rocsparse_pointer_mode_host); // Query rocsparse for the required buffer size size_t buffer_size; rocsparse_scsrgemm_buffer_size(handle, rocsparse_operation_none, rocsparse_operation_none, m, n, k, &alpha, descr_A, nnz_A, csr_row_ptr_A, csr_col_ind_A, descr_B, nnz_B, csr_row_ptr_B, csr_col_ind_B, &beta, descr_D, nnz_D, csr_row_ptr_D, csr_col_ind_D, info_C, &buffer_size); // Allocate buffer void* buffer; hipMalloc(&buffer, buffer_size); // Obtain number of total non-zero entries in C and row pointers of C rocsparse_int nnz_C; hipMalloc((void**)&csr_row_ptr_C, sizeof(rocsparse_int) * (m + 1)); rocsparse_csrgemm_nnz(handle, rocsparse_operation_none, rocsparse_operation_none, m, n, k, descr_A, nnz_A, csr_row_ptr_A, csr_col_ind_A, descr_B, nnz_B, csr_row_ptr_B, csr_col_ind_B, descr_D, nnz_D, csr_row_ptr_D, csr_col_ind_D, descr_C, csr_row_ptr_C, &nnz_C, info_C, buffer); // Compute column indices and values of C hipMalloc((void**)&csr_col_ind_C, sizeof(rocsparse_int) * nnz_C); rocsparse_csrgemm_symbolic(handle, rocsparse_operation_none, rocsparse_operation_none, m, n, k, descr_A, nnz_A, csr_row_ptr_A, csr_col_ind_A, descr_B, nnz_B, csr_row_ptr_B, csr_col_ind_B, descr_D, nnz_D, csr_row_ptr_D, csr_col_ind_D, descr_C, nnz_C, csr_row_ptr_C, csr_col_ind_C, info_C, buffer); hipMalloc((void**)&csr_val_C, sizeof(float) * nnz_C); rocsparse_scsrgemm_numeric(handle, rocsparse_operation_none, rocsparse_operation_none, m, n, k, &alpha, descr_A, nnz_A, csr_val_A, csr_row_ptr_A, csr_col_ind_A, descr_B, nnz_B, csr_val_B, csr_row_ptr_B, csr_col_ind_B, &beta, descr_D, nnz_D, csr_val_D, csr_row_ptr_D, csr_col_ind_D, descr_C, nnz_C, csr_val_C, csr_row_ptr_C, csr_col_ind_C, info_C, buffer); 
 - Note - This function does not produce deterministic results. - Note - If \(\alpha == 0\), then \(C = \beta \cdot D\) will be computed. - Note - If \(\beta == 0\), then \(C = \alpha \cdot op(A) \cdot op(B)\) will be computed. - Note - \(\alpha == beta == 0\) is invalid. - Note - Currently, only - trans_A== rocsparse_operation_none is supported.- Note - Currently, only - trans_B== rocsparse_operation_none is supported.- Note - Currently, only rocsparse_matrix_type_general is supported. - Note - Please note, that for matrix products with more than 4096 non-zero entries per row, additional temporary storage buffer is allocated by the algorithm. - Note - This function is blocking with respect to the host. - Note - This routine does not support execution in a hipGraph context. - Parameters:
- handle – [in] handle to the rocsparse library context queue. 
- trans_A – [in] matrix \(A\) operation type. 
- trans_B – [in] matrix \(B\) operation type. 
- m – [in] number of rows of the sparse CSR matrix \(op(A)\) and \(C\). 
- n – [in] number of columns of the sparse CSR matrix \(op(B)\) and \(C\). 
- k – [in] number of columns of the sparse CSR matrix \(op(A)\) and number of rows of the sparse CSR matrix \(op(B)\). 
- alpha – [in] scalar \(\alpha\). 
- descr_A – [in] descriptor of the sparse CSR matrix \(A\). Currently, only rocsparse_matrix_type_general is supported. 
- nnz_A – [in] number of non-zero entries of the sparse CSR matrix \(A\). 
- csr_val_A – [in] array of - nnz_Aelements of the sparse CSR matrix \(A\).
- csr_row_ptr_A – [in] array of - m+1elements ( \(op(A) == A\),- k+1otherwise) that point to the start of every row of the sparse CSR matrix \(op(A)\).
- csr_col_ind_A – [in] array of - nnz_Aelements containing the column indices of the sparse CSR matrix \(A\).
- descr_B – [in] descriptor of the sparse CSR matrix \(B\). Currently, only rocsparse_matrix_type_general is supported. 
- nnz_B – [in] number of non-zero entries of the sparse CSR matrix \(B\). 
- csr_val_B – [in] array of - nnz_Belements of the sparse CSR matrix \(B\).
- csr_row_ptr_B – [in] array of - k+1elements ( \(op(B) == B\),- m+1otherwise) that point to the start of every row of the sparse CSR matrix \(op(B)\).
- csr_col_ind_B – [in] array of - nnz_Belements containing the column indices of the sparse CSR matrix \(B\).
- beta – [in] scalar \(\beta\). 
- descr_D – [in] descriptor of the sparse CSR matrix \(D\). Currently, only rocsparse_matrix_type_general is supported. 
- nnz_D – [in] number of non-zero entries of the sparse CSR matrix \(D\). 
- csr_val_D – [in] array of - nnz_Delements of the sparse CSR matrix \(D\).
- csr_row_ptr_D – [in] array of - m+1elements that point to the start of every row of the sparse CSR matrix \(D\).
- csr_col_ind_D – [in] array of - nnz_Delements containing the column indices of the sparse CSR matrix \(D\).
- descr_C – [in] descriptor of the sparse CSR matrix \(C\). Currently, only rocsparse_matrix_type_general is supported. 
- nnz_C – [in] number of non-zero entries of the sparse CSR matrix \(C\). 
- csr_val_C – [out] array of - nnz_Celements of the sparse CSR matrix \(C\).
- csr_row_ptr_C – [in] array of - m+1elements that point to the start of every row of the sparse CSR matrix \(C\).
- csr_col_ind_C – [in] array of - nnz_Celements containing the column indices of the sparse CSR matrix \(C\).
- info_C – [in] structure that holds meta data for the sparse CSR matrix \(C\). 
- temp_buffer – [in] temporary storage buffer allocated by the user, size is returned by rocsparse_scsrgemm_buffer_size(), rocsparse_dcsrgemm_buffer_size(), rocsparse_ccsrgemm_buffer_size() or rocsparse_zcsrgemm_buffer_size(). 
 
- Return values:
- rocsparse_status_success – the operation completed successfully. 
- rocsparse_status_invalid_handle – the library context was not initialized. 
- rocsparse_status_invalid_size – - m,- n,- k,- nnz_A,- nnz_Bor- nnz_Dis invalid.
- rocsparse_status_invalid_pointer – - alphaand- betaare invalid,- descr_A,- csr_val_A,- csr_row_ptr_A,- csr_col_ind_A,- descr_B,- csr_val_B,- csr_row_ptr_Bor- csr_col_ind_Bare invalid if- alphais valid,- descr_D,- csr_val_D,- csr_row_ptr_Dor- csr_col_ind_Dis invalid if- betais valid,- csr_val_C,- csr_row_ptr_C,- csr_col_ind_C,- info_Cor- temp_bufferis invalid.
- rocsparse_status_memory_error – additional buffer for long rows could not be allocated. 
- rocsparse_status_not_implemented – - trans_A!= rocsparse_operation_none,- trans_B!= rocsparse_operation_none, or- rocsparse_matrix_type!= rocsparse_matrix_type_general.