Showing results for

- Intel Community
- Software Development SDKs and Libraries
- Intel® oneAPI Math Kernel Library & Intel® Math Kernel Library
- mkl_sparse_d_mv returns different values than mkl_dcsrsymv

- Subscribe to RSS Feed
- Mark Topic as New
- Mark Topic as Read
- Float this Topic for Current User
- Bookmark
- Subscribe
- Mute
- Printer Friendly Page

Highlighted
##

B__David

Beginner

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Email to a Friend
- Report Inappropriate Content

02-20-2019
03:39 AM

27 Views

mkl_sparse_d_mv returns different values than mkl_dcsrsymv

Hello,

we are updating the code in my organisation to get rid of the deprecated SPBLAS functions. Our software makes some structure calculations with sparse matrices codified as CSR (symmetric, upper, one-based indexes, non-unit diagonal) and force/displacement vectors. Until now we were using mkl_dscrsymv to multiply matrix by vector (we were obtaining exactly the same values codifying the vector as a one-row matrix and using mkl_dcsrmm because we experimented some segmentation faults with an older MKL version; btw, we are working with MS Visual Studio C++ on an Intel Core i7).

The fact is, all our operations with the Inspector-Executor functions (building the matrix from a COO, adding, even the results from PARDISO) are ok, but the multiplication with mkl_sparse_d_mv return a few significativelly different values than the deprecated functions, and that makes our structures fail. For instance, with a rank=1792 and a vector with 496 non-zero values, we find 144 different values in the multiplication, 36 of them being significally different (at least 1% in absolute value).

This is the code for the operation V_out = M x V_in :

matrix_descr matrix_descr;

matrix_descr.type = sparse_matrix_type_t::SPARSE_MATRIX_TYPE_SYMMETRIC;

matrix_descr.mode = sparse_fill_mode_t::SPARSE_FILL_MODE_UPPER;

matrix_descr.diag = sparse_diag_type_t::SPARSE_DIAG_NON_UNIT;

sparse_status_t res = mkl_sparse_d_mv (sparse_operation_t::SPARSE_OPERATION_NON_TRANSPOSE, 1.0, M, matrix_descr, V_in, 0.0, V_out);

The return value is always sparse_status_t::SPARSE_STATUS_SUCCESS, but the values returned into V_out do not match the ones expected.

Is this a problem you were aware of, or have I found some bug?

Thanks,

David B.

2 Replies

Highlighted
##

Spencer_P_Intel

Employee

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Email to a Friend
- Report Inappropriate Content

02-20-2019
01:57 PM

27 Views

Hi David,

To be clear, are you creating the sparse_matrix_t M with mkl_sparse_?_create_csr() or with mkl_sparse_?_create_coo() ? If with the coo, could you convert to CSR and then try with mkl_sparse_?_create_csr() ?

If you wouldn't mind, could you share your matrix and a reproducer so we can determine if it is a bug or not?

Best,

Spencer

Highlighted
##

or you can submit the issue to the intel online service center if you need to share the private info and data

Gennady_F_Intel

Moderator

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Email to a Friend
- Report Inappropriate Content

02-20-2019
07:32 PM

27 Views

For more complete information about compiler optimizations, see our Optimization Notice.