Fix TVAL sparse input(convert form coo to csr)

This commit is contained in:
kradchen
2023-06-02 11:34:14 +08:00
parent d8fe36f48c
commit c1eeadf72a

View File

@@ -159,13 +159,31 @@ namespace Recon
int * xIdxs = new int[M.getRowVector().getDataSize()];
std::copy(M.getRowVector().getData(),M.getRowVector().getData()+M.getRowVector().getDataSize(),xIdxs);
Aurora::Matrix values = M.getValVector();
size_t cols = M.getM(), rows = M.getN();
int nz = std::max(M.getColVector().getDataSize(),std::max(M.getRowVector().getDataSize(),M.getValVector().getDataSize()));
sparse_matrix_t A;
sparse_matrix_t csrA;
mkl_sparse_d_create_coo(&A, sparse_index_base_t::SPARSE_INDEX_BASE_ZERO, rows, cols, nz, yIdxs, xIdxs,values.getData());
mkl_sparse_convert_csr(A, sparse_operation_t::SPARSE_OPERATION_NON_TRANSPOSE, &csrA);
int n_rows,n_cols;
int *rows_start,*rows_end,*col_indx;
double * csrValues;
sparse_index_base_t index;
mkl_sparse_d_export_csr(csrA, &index, &n_rows, &n_cols, &rows_start, &rows_end, &col_indx, &csrValues);
int *row_idx = new int[n_rows+1];
std::copy(rows_start,rows_start+n_rows,row_idx);
row_idx[n_rows] = rows_end[n_rows-1];
float* bData = new float[b.getDataSize()];
std::copy(b.getData(),b.getData()+b.getDataSize(),bData);
size_t bDims[3]={(size_t)b.getDimSize(0),(size_t)b.getDimSize(1),(size_t)b.getDimSize(2)};
size_t rdims[3] = {(size_t)dims[0], (size_t)dims[1], (size_t)dims[2]};
bool pagelocked = false;
auto result = TVALGPU(xIdxs, yIdxs, values.getData(), M.getM(), M.getN(), nz, bData, bDims, rdims, opt, device, false);
auto result = TVALGPU(row_idx, col_indx, csrValues, M.getM(), M.getN(), nz, bData, bDims, rdims, opt, device, false);
mkl_sparse_destroy(A);
mkl_sparse_destroy(csrA);
delete [] row_idx;
delete [] xIdxs;
delete [] yIdxs;
delete [] bData;