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
@@ -67,8 +67,6 @@ for (fname, elty, intty) in ((:onemklSsparse_set_csr_data , :Float32 , :Int3
6767 if m != 0 && n != 0
6868 $ fname (sycl_queue (queue), handle_ptr[], m, n, ' O' , rowPtr, colVal, nzVal)
6969 end
70- dA = oneSparseMatrixCSR {$elty, $intty} (handle_ptr[], rowPtr, colVal, nzVal, (m, n), nnzA)
71- finalizer (sparse_release_matrix_handle, dA)
7270 return dA
7371 end
7472
@@ -84,9 +82,11 @@ for (fname, elty, intty) in ((:onemklSsparse_set_csr_data , :Float32 , :Int3
8482 # Don't update handle if matrix is empty
8583 if m != 0 && n != 0
8684 $ fname (sycl_queue (queue), handle_ptr[], n, m, ' O' , colPtr, rowVal, nzVal) # CSC of A is CSR of Aᵀ
85+ dA = oneSparseMatrixCSC {$elty, $intty} (handle_ptr[], colPtr, rowVal, nzVal, dims, nnzA)
86+ finalizer (sparse_release_matrix_handle, dA)
87+ else
88+ dA = oneSparseMatrixCSC {$elty, $intty} (nothing , colPtr, rowVal, nzVal, dims, nnzA)
8789 end
88- dA = oneSparseMatrixCSC {$elty, $intty} (handle_ptr[], colPtr, rowVal, nzVal, dims, nnzA)
89- finalizer (sparse_release_matrix_handle, dA)
9090 return dA
9191 end
9292
@@ -100,7 +100,6 @@ for (fname, elty, intty) in ((:onemklSsparse_set_csr_data , :Float32 , :Int3
100100 end
101101
102102 function SparseMatrixCSC (A:: oneSparseMatrixCSR{$elty, $intty} )
103- handle_ptr = Ref {matrix_handle_t} ()
104103 At = SparseMatrixCSC (reverse (A. dims)... , Vector (A. rowPtr), Vector (A. colVal), Vector (A. nzVal))
105104 A_csc = SparseMatrixCSC (At |> transpose)
106105 return A_csc
@@ -115,7 +114,6 @@ for (fname, elty, intty) in ((:onemklSsparse_set_csr_data , :Float32 , :Int3
115114 end
116115
117116 function SparseMatrixCSC (A:: oneSparseMatrixCSC{$elty, $intty} )
118- handle_ptr = Ref {matrix_handle_t} ()
119117 A_csc = SparseMatrixCSC (A. dims... , Vector (A. colPtr), Vector (A. rowVal), Vector (A. nzVal))
120118 return A_csc
121119 end
@@ -141,14 +139,17 @@ for (fname, elty, intty) in ((:onemklSsparse_set_coo_data , :Float32 , :Int3
141139 nzVal = oneVector {$elty} (val)
142140 nnzA = length (val)
143141 queue = global_queue (context (nzVal), device (nzVal))
144- $ fname (sycl_queue (queue), handle_ptr[], m, n, nnzA, ' O' , rowInd, colInd, nzVal)
145- dA = oneSparseMatrixCOO {$elty, $intty} (handle_ptr[], rowInd, colInd, nzVal, (m,n), nnzA)
146- finalizer (sparse_release_matrix_handle, dA)
142+ if m != 0 && n != 0
143+ $ fname (sycl_queue (queue), handle_ptr[], m, n, nnzA, ' O' , rowInd, colInd, nzVal)
144+ dA = oneSparseMatrixCOO {$elty, $intty} (handle_ptr[], rowInd, colInd, nzVal, (m,n), nnzA)
145+ finalizer (sparse_release_matrix_handle, dA)
146+ else
147+ dA = oneSparseMatrixCOO {$elty, $intty} (nothing , rowInd, colInd, nzVal, (m,n), nnzA)
148+ end
147149 return dA
148150 end
149151
150152 function SparseMatrixCSC (A:: oneSparseMatrixCOO{$elty, $intty} )
151- handle_ptr = Ref {matrix_handle_t} ()
152153 A = sparse (Vector (A. rowInd), Vector (A. colInd), Vector (A. nzVal), A. dims... )
153154 return A
154155 end
0 commit comments