Skip to content

Commit f2dd9b8

Browse files
committed
Add finalizer to release the sparse matrix handle
1 parent 77c51eb commit f2dd9b8

File tree

3 files changed

+18
-2
lines changed

3 files changed

+18
-2
lines changed

deps/src/onemkl.cpp

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4055,7 +4055,6 @@ extern "C" int onemklXsparse_init_matrix_handle(matrix_handle_t *p_spMat) {
40554055

40564056
extern "C" int onemklXsparse_release_matrix_handle(syclQueue_t device_queue, matrix_handle_t *p_spMat) {
40574057
auto status = oneapi::mkl::sparse::release_matrix_handle(device_queue->val, (oneapi::mkl::sparse::matrix_handle_t*) p_spMat, {});
4058-
__FORCE_MKL_FLUSH__(status);
40594058
return 0;
40604059
}
40614060

@@ -4157,6 +4156,12 @@ extern "C" int onemklXsparse_optimize_trmv(syclQueue_t device_queue, onemklUplo
41574156
return 0;
41584157
}
41594158

4159+
extern "C" int onemklXsparse_optimize_trsv(syclQueue_t device_queue, onemklUplo uplo_val, onemklTranspose opA, onemklDiag diag_val, matrix_handle_t A) {
4160+
auto status = oneapi::mkl::sparse::optimize_trsv(device_queue->val, convert(uplo_val), convert(opA), convert(diag_val), (oneapi::mkl::sparse::matrix_handle_t) A, {});
4161+
__FORCE_MKL_FLUSH__(status);
4162+
return 0;
4163+
}
4164+
41604165
extern "C" int onemklSsparse_gemv(syclQueue_t device_queue, onemklTranspose opA, float alpha, matrix_handle_t A, float *x, float beta, float *y) {
41614166
auto status = oneapi::mkl::sparse::gemv(device_queue->val, convert(opA), alpha, (oneapi::mkl::sparse::matrix_handle_t) A, x, beta, y, {});
41624167
__FORCE_MKL_FLUSH__(status);

deps/src/onemkl.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2473,6 +2473,9 @@ int onemklXsparse_optimize_gemv(syclQueue_t device_queue, onemklTranspose opA, m
24732473
int onemklXsparse_optimize_trmv(syclQueue_t device_queue, onemklUplo uplo_val, onemklTranspose
24742474
opA, onemklDiag diag_val, matrix_handle_t A);
24752475

2476+
int onemklXsparse_optimize_trsv(syclQueue_t device_queue, onemklUplo uplo_val, onemklTranspose
2477+
opA, onemklDiag diag_val, matrix_handle_t A);
2478+
24762479
int onemklSsparse_gemv(syclQueue_t device_queue, onemklTranspose opA, float alpha,
24772480
matrix_handle_t A, float *x, float beta, float *y);
24782481

lib/mkl/wrappers_sparse.jl

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,9 @@
1+
function sparse_release_matrix_handle(A::oneSparseMatrixCSR)
2+
queue = global_queue(context(A.nzVal), device(A.nzVal))
3+
handle_ptr = Ref{matrix_handle_t}(A.handle)
4+
onemklXsparse_release_matrix_handle(sycl_queue(queue), handle_ptr)
5+
end
6+
17
for (fname, elty, intty) in ((:onemklSsparse_set_csr_data , :Float32 , :Int32),
28
(:onemklSsparse_set_csr_data_64, :Float32 , :Int64),
39
(:onemklDsparse_set_csr_data , :Float64 , :Int32),
@@ -18,7 +24,9 @@ for (fname, elty, intty) in ((:onemklSsparse_set_csr_data , :Float32 , :Int3
1824
nnzA = length(At.nzval)
1925
queue = global_queue(context(nzVal), device(nzVal))
2026
$fname(sycl_queue(queue), handle_ptr[], m, n, 'O', rowPtr, colVal, nzVal)
21-
return oneSparseMatrixCSR{$elty, $intty}(handle_ptr[], rowPtr, colVal, nzVal, (m,n), nnzA)
27+
dA = oneSparseMatrixCSR{$elty, $intty}(handle_ptr[], rowPtr, colVal, nzVal, (m,n), nnzA)
28+
finalizer(sparse_release_matrix_handle, dA)
29+
return dA
2230
end
2331

2432
function SparseMatrixCSC(A::oneSparseMatrixCSR{$elty, $intty})

0 commit comments

Comments
 (0)