Quantcast
Channel: Intel® oneAPI Math Kernel Library & Intel® Math Kernel Library
Viewing all articles
Browse latest Browse all 2652

mkl_sparse_convert_csr doesn't change rows & cols

$
0
0

Hello, I am using mkl_sparse_convert_csr to perform transpose function by calling with SPARSE_OPERATION_TRANSPOSE option.

However, the values of the result matrix is transposed correctly with the row & col left unchanged.

Here is the code.

#include <bits/stdc++.h>
#include <mkl.h>
#include <omp.h>
using namespace std;

namespace {
// Output MKL sparse matrix in CSR format.
void Print(const sparse_matrix_t &mat) {
  sparse_index_base_t index_base;
  MKL_INT rows, cols;
  MKL_INT *rows_start, *rows_end, *col_idx;
  float *values;
  assert(mkl_sparse_s_export_csr(mat, &index_base, &rows, &cols, &rows_start,
                                 &rows_end, &col_idx,
                                 &values) == SPARSE_STATUS_SUCCESS);
  cout << "IndexBase="<< (index_base == SPARSE_INDEX_BASE_ZERO ? 0 : 1)
       << endl;
  cout << "Rows="<< rows << " Cols="<< cols << endl;
  for (int i = 0; i < rows; ++i) {
    cout << "RowsKey="<< i << ":";
    for (int j = rows_start[i]; j < rows_end[i]; ++j) {
      cout << "("<< col_idx[j] << ","<< values[j] << ")";
    }
    cout << endl;
  }
}

} // namespace

int main() {
  // Auto log flush.
  cout.setf(std::ios::unitbuf);
  mkl_set_num_threads(1);

  const MKL_INT n = 4, m = 5;

  // Create matrix a.
  vector<float> values = {1, 2, 2, 1};
  vector<MKL_INT> rows_start = {0, 0, 2, 3};
  vector<MKL_INT> rows_end = {0, 2, 3, 4};
  vector<MKL_INT> col_idx = {0, 2, 2, 3};

  sparse_matrix_t mat_a;
  assert(mkl_sparse_s_create_csr(&mat_a, SPARSE_INDEX_BASE_ZERO, n, m,
                                 rows_start.data(), rows_end.data(),
                                 col_idx.data(),
                                 values.data()) == SPARSE_STATUS_SUCCESS);
  cout << "Matrix A:"<< endl;
  Print(mat_a);

  sparse_matrix_t mat_b;
  assert(mkl_sparse_convert_csr(mat_a, SPARSE_OPERATION_TRANSPOSE, &mat_b) ==
         SPARSE_STATUS_SUCCESS);
  cout << "Matrix B:"<< endl;
  Print(mat_b);

  mkl_sparse_destroy(mat_b);
  mkl_sparse_destroy(mat_a);
  return 0;
}
 

The result is here:

Matrix A:
IndexBase=0
Rows=4 Cols=5
RowsKey=0:
RowsKey=1:(0,1)(2,2)
RowsKey=2:(2,2)
RowsKey=3:(3,1)
Matrix B:
IndexBase=0
Rows=4 Cols=5
RowsKey=0:(1,1)
RowsKey=1:
RowsKey=2:(1,2)(2,2)
RowsKey=3:(3,1)

As you can see, the rows=4 & cols=5 in the matrix B.

Any idea what the problem is? Is there any useful information?

Thank you very much in advance.

Zixi


Viewing all articles
Browse latest Browse all 2652

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>