magma_int_t magma_d_spmv_shift( double alpha, magma_d_sparse_matrix A, double lambda, magma_d_vector x, double beta, magma_int_t offset, magma_int_t blocksize, magma_index_t *add_rows, magma_d_vector y ){ if( A.memory_location != x.memory_location || x.memory_location != y.memory_location ){ printf("error: linear algebra objects are not located in same memory!\n"); printf("memory locations are: %d %d %d\n", A.memory_location, x.memory_location, y.memory_location ); return MAGMA_ERR_INVALID_PTR; } // DEV case if( A.memory_location == Magma_DEV ){ if( A.storage_type == Magma_CSR ){ //printf("using CSR kernel for SpMV: "); magma_dgecsrmv_shift( MagmaNoTrans, A.num_rows, A.num_cols, alpha, lambda, A.val, A.row, A.col, x.val, beta, offset, blocksize, add_rows, y.val ); //printf("done.\n"); return MAGMA_SUCCESS; } else if( A.storage_type == Magma_ELLPACK ){ //printf("using ELLPACK kernel for SpMV: "); magma_dgeellmv_shift( MagmaNoTrans, A.num_rows, A.num_cols, A.max_nnz_row, alpha, lambda, A.val, A.col, x.val, beta, offset, blocksize, add_rows, y.val ); //printf("done.\n"); return MAGMA_SUCCESS; } else if( A.storage_type == Magma_ELL ){ //printf("using ELL kernel for SpMV: "); magma_dgeelltmv_shift( MagmaNoTrans, A.num_rows, A.num_cols, A.max_nnz_row, alpha, lambda, A.val, A.col, x.val, beta, offset, blocksize, add_rows, y.val ); //printf("done.\n"); return MAGMA_SUCCESS; } else { printf("error: format not supported.\n"); return MAGMA_ERR_NOT_SUPPORTED; } } // CPU case missing! else{ printf("error: CPU not yet supported.\n"); return MAGMA_ERR_NOT_SUPPORTED; } }
extern "C" magma_int_t magma_d_spmv_shift( double alpha, magma_d_matrix A, double lambda, magma_d_matrix x, double beta, magma_int_t offset, magma_int_t blocksize, magma_index_t *add_rows, magma_d_matrix y, magma_queue_t queue ) { magma_int_t info = 0; // make sure RHS is a dense matrix if ( x.storage_type != Magma_DENSE ) { printf("error: only dense vectors are supported.\n"); info = MAGMA_ERR_NOT_SUPPORTED; goto cleanup; } if ( A.memory_location != x.memory_location || x.memory_location != y.memory_location ) { printf("error: linear algebra objects are not located in same memory!\n"); printf("memory locations are: %d %d %d\n", A.memory_location, x.memory_location, y.memory_location ); info = MAGMA_ERR_INVALID_PTR; goto cleanup; } // DEV case if ( A.memory_location == Magma_DEV ) { if ( A.storage_type == Magma_CSR ) { //printf("using CSR kernel for SpMV: "); CHECK( magma_dgecsrmv_shift( MagmaNoTrans, A.num_rows, A.num_cols, alpha, lambda, A.dval, A.drow, A.dcol, x.dval, beta, offset, blocksize, add_rows, y.dval, queue )); //printf("done.\n"); } else if ( A.storage_type == Magma_ELLPACKT ) { //printf("using ELLPACKT kernel for SpMV: "); CHECK( magma_dgeellmv_shift( MagmaNoTrans, A.num_rows, A.num_cols, A.max_nnz_row, alpha, lambda, A.dval, A.dcol, x.dval, beta, offset, blocksize, add_rows, y.dval, queue )); //printf("done.\n"); } else if ( A.storage_type == Magma_ELL ) { //printf("using ELL kernel for SpMV: "); CHECK( magma_dgeelltmv_shift( MagmaNoTrans, A.num_rows, A.num_cols, A.max_nnz_row, alpha, lambda, A.dval, A.dcol, x.dval, beta, offset, blocksize, add_rows, y.dval, queue )); //printf("done.\n"); } else { printf("error: format not supported.\n"); info = MAGMA_ERR_NOT_SUPPORTED; } } // CPU case missing! else { printf("error: CPU not yet supported.\n"); info = MAGMA_ERR_NOT_SUPPORTED; } cleanup: return info; }