I am trying to use the Inspector-Executor API for SpMV, but it seems like the mkl_sparse_optimize() routine is not performing any optimizations, as I am not seeing any performance difference for matrices shown here http://www.inteldevconference.com/wp-content/uploads/2015/12/Intel-DevCon-London-2015-Fedorov-MKL.pd.... I am using the following code:
sparse_status_t err; sparse_matrix_t A; struct matrix_descr matdescr; matdescr.type = SPARSE_MATRIX_TYPE_GENERAL; err = mkl_sparse_d_create_csr(&A, SPARSE_INDEX_BASE_ZERO, nrows, ncols, pointerB, pointerE, colind, values); err = mkl_sparse_set_mv_hint(A, SPARSE_OPERATION_NON_TRANSPOSE, SPARSE_FULL, 50000000); err = mkl_sparse_set_memory_hint(A, SPARSE_MEMORY_AGGRESSIVE); err = mkl_sparse_optimize(A); for (int l = 0; l < LOOPS; l++) mkl_sparse_d_mv(SPARSE_OPERATION_NON_TRANSPOSE, ALPHA, A, matdescr, x, BETA, y);
I am using the API incorrectly?
yes, at the first glance you use these routines correct. You may also have a look at the similar examples show how to do that - see mklroot/examples/spblasc/ directory. Have you compared this new API with mkl_dcsrmv routine?