Hi.
double alpha = 1.0;
double beta = 0.0;
// Original matrix
// 1 0 0 2 0
// 0 3 0 0 0
// 0 0 4 0 0
// 0 5 0 6 7
// 0 0 0 0 8
// aoclsparse_int coo_row_ind[NNZ] = {0, 0, 1, 2, 3, 3, 3, 4};
// aoclsparse_int coo_col_ind[NNZ] = {0, 3, 1, 2, 1, 3, 4, 4};
aoclsparse_int coo_row_ind[NNZ] = {1, 1, 2, 3, 4, 4, 4, 5};
aoclsparse_int coo_col_ind[NNZ] = {1, 4, 2, 4, 2, 4, 5, 5};
double coo_val[NNZ] = {1, 2, 3, 4, 5, 6, 7, 8};
// Input vectors
double x[N] = {1.0, 2.0, 3.0, 4.0, 5.0};
double y[M];
// Expected reference result & tolerance
double y_exp[M] = {9.0, 6.0, 12.0, 69.0, 40.0};
double tol = 1e-12;
aoclsparse_int oki, ok = 1;
// Print aoclsparse version
printf("%s\n", aoclsparse_get_version());
// Create matrix descriptor
aoclsparse_create_mat_descr(&descr);
status = aoclsparse_create_dcoo(&A, base, M, N, NNZ, coo_row_ind, coo_col_ind, coo_val);
if(status != aoclsparse_status_success)
{
printf("Error while creating COO sparse matrix, status = %i\n", status);
return 1;
}
aoclsparse_matrix csr;
status = aoclsparse_convert_csr(
A,
aoclsparse_operation_none,
&csr
);
// Hint the system what operation to expect
status = aoclsparse_set_mv_hint(csr, trans, descr, 1);
if(status != aoclsparse_status_success)
{
printf("Error while hinting operation, status = %i\n", status);
return 1;
}
status = aoclsparse_optimize(csr);
if(status != aoclsparse_status_success)
{
printf("Error while optimizing the matrix, status = %i\n", status);
return 1;
}
// Invoke SPMV API (double precision)
printf("Invoking aoclsparse_dmv after COO->CSR optimize...\n");
status = aoclsparse_dmv(trans, &alpha, csr, descr, x, &beta, y);
if(status != aoclsparse_status_success)
{
printf("Error while computing SPMV, status = %i\n", status);
return 1;
}
// Print and check the results
printf("Output vector:\n");
for(aoclsparse_int i = 0; i < M; i++)
{
oki = fabs(y[i] - y_exp[i]) <= tol;
printf(" %lf %c\n", y[i], oki ? ' ' : '!');
ok = ok && oki;
}
// Cleanup
aoclsparse_destroy_mat_descr(descr);
aoclsparse_destroy(&A);
return ok ? 0 : 2;
Hi.
Here is the code:
`#define M 5
#define N 5
#define NNZ 8
int test_example(void)
{
aoclsparse_status status;
aoclsparse_matrix A = NULL;
aoclsparse_mat_descr descr = NULL;
aoclsparse_operation trans = aoclsparse_operation_none;
//aoclsparse_index_base base = aoclsparse_index_base_zero;
aoclsparse_index_base base = aoclsparse_index_base_one;
}
`
Everything is normal at 0 base, but when I just changed the matrix to 1-base, aoclsparse_det_mv_cint funtion returns aoclsparse_stus_invalid_value, Does this interface not support 1base?
Best regards!