11function sparse_release_matrix_handle (A:: oneAbstractSparseMatrix )
2- queue = global_queue ( context (A . nzVal), device (A . nzVal))
3- m, n = size (A )
4- return if m != 0 && n != 0
2+ return if A . handle != = nothing
3+ queue = global_queue ( context (A . nzVal), device (A . nzVal) )
4+ oneL0 . synchronize (queue)
55 handle_ptr = Ref {matrix_handle_t} (A. handle)
66 onemklXsparse_release_matrix_handle (sycl_queue (queue), handle_ptr)
77 end
@@ -29,9 +29,11 @@ for (fname, elty, intty) in ((:onemklSsparse_set_csr_data , :Float32 , :Int3
2929 # Don't update handle if matrix is empty
3030 if m != 0 && n != 0
3131 $ fname (sycl_queue (queue), handle_ptr[], m, n, ' O' , rowPtr, colVal, nzVal)
32+ dA = oneSparseMatrixCSR {$elty, $intty} (handle_ptr[], rowPtr, colVal, nzVal, (m, n), nnzA)
33+ finalizer (spars_release_matrix_handle, dA)
34+ else
35+ dA = oneSparseMatrixCSR {$elty, $intty} (nothing , rowPtr, colVal, nzVal, (m, n), nnzA)
3236 end
33- dA = oneSparseMatrixCSR {$elty, $intty} (handle_ptr[], rowPtr, colVal, nzVal, (m, n), nnzA)
34- finalizer (sparse_release_matrix_handle, dA)
3537 return dA
3638 end
3739
@@ -47,9 +49,11 @@ for (fname, elty, intty) in ((:onemklSsparse_set_csr_data , :Float32 , :Int3
4749 # Don't update handle if matrix is empty
4850 if m != 0 && n != 0
4951 $ fname (sycl_queue (queue), handle_ptr[], n, m, ' O' , colPtr, rowVal, nzVal) # CSC of A is CSR of Aᵀ
52+ dA = oneSparseMatrixCSC {$elty, $intty} (handle_ptr[], colPtr, rowVal, nzVal, dims, nnzA)
53+ finalizer (sparse_release_matrix_handle, dA)
54+ else
55+ dA = oneSparseMatrixCSC {$elty, $intty} (nothing , colPtr, rowVal, nzVal, dims, nnzA)
5056 end
51- dA = oneSparseMatrixCSC {$elty, $intty} (handle_ptr[], colPtr, rowVal, nzVal, dims, nnzA)
52- finalizer (sparse_release_matrix_handle, dA)
5357 return dA
5458 end
5559
@@ -63,7 +67,6 @@ for (fname, elty, intty) in ((:onemklSsparse_set_csr_data , :Float32 , :Int3
6367 end
6468
6569 function SparseMatrixCSC (A:: oneSparseMatrixCSR{$elty, $intty} )
66- handle_ptr = Ref {matrix_handle_t} ()
6770 At = SparseMatrixCSC (reverse (A. dims)... , Vector (A. rowPtr), Vector (A. colVal), Vector (A. nzVal))
6871 A_csc = SparseMatrixCSC (At |> transpose)
6972 return A_csc
@@ -78,7 +81,6 @@ for (fname, elty, intty) in ((:onemklSsparse_set_csr_data , :Float32 , :Int3
7881 end
7982
8083 function SparseMatrixCSC (A:: oneSparseMatrixCSC{$elty, $intty} )
81- handle_ptr = Ref {matrix_handle_t} ()
8284 A_csc = SparseMatrixCSC (A. dims... , Vector (A. colPtr), Vector (A. rowVal), Vector (A. nzVal))
8385 return A_csc
8486 end
@@ -104,14 +106,17 @@ for (fname, elty, intty) in ((:onemklSsparse_set_coo_data , :Float32 , :Int3
104106 nzVal = oneVector {$elty} (val)
105107 nnzA = length (val)
106108 queue = global_queue (context (nzVal), device (nzVal))
107- $ fname (sycl_queue (queue), handle_ptr[], m, n, nnzA, ' O' , rowInd, colInd, nzVal)
108- dA = oneSparseMatrixCOO {$elty, $intty} (handle_ptr[], rowInd, colInd, nzVal, (m,n), nnzA)
109- finalizer (sparse_release_matrix_handle, dA)
109+ if m != 0 && n != 0
110+ $ fname (sycl_queue (queue), handle_ptr[], m, n, nnzA, ' O' , rowInd, colInd, nzVal)
111+ dA = oneSparseMatrixCOO {$elty, $intty} (handle_ptr[], rowInd, colInd, nzVal, (m,n), nnzA)
112+ finalizer (sparse_release_matrix_handle, dA)
113+ else
114+ dA = oneSparseMatrixCOO {$elty, $intty} (nothing , rowInd, colInd, nzVal, (m,n), nnzA)
115+ end
110116 return dA
111117 end
112118
113119 function SparseMatrixCSC (A:: oneSparseMatrixCOO{$elty, $intty} )
114- handle_ptr = Ref {matrix_handle_t} ()
115120 A = sparse (Vector (A. rowInd), Vector (A. colInd), Vector (A. nzVal), A. dims... )
116121 return A
117122 end
0 commit comments