8282end
8383
8484function MPSTemporaryNDArray (cmdbuf:: MTLCommandBuffer , descriptor:: MPSNDArrayDescriptor )
85- @objc [MPSNDTemporaryNDArray temporaryNDArrayWithCommandBuffer: cmdbuf:: id{MTLCommandBuffer}
85+ @objc [MPSTemporaryNDArray temporaryNDArrayWithCommandBuffer: cmdbuf:: id{MTLCommandBuffer}
8686 descriptor: descriptor:: id{MPSNDArrayDescriptor} ]:: id{MPSTemporaryNDArray}
8787 return obj
8888end
123123 return obj
124124 end
125125else
126- function MPSNDArray (buffer :: MTLBuffer , offset :: UInt , descriptor :: MPSNDArrayDescriptor )
126+ function MPSNDArray (_ :: MTLBuffer , _ :: UInt , _ :: MPSNDArrayDescriptor )
127127 @assert false " Creating an MPSNDArray that shares data with user-provided MTLBuffer is only supported in macOS v15+"
128128 end
129129end
@@ -135,20 +135,18 @@ function MPSNDArray(arr::MtlArray{T,N}) where {T,N}
135135 return MPSNDArray (arr. data[], UInt (arr. offset), desc)
136136end
137137
138- function Metal. MtlArray (ndarr:: MPSNDArray ; storage = Metal. DefaultStorageMode)
138+ function Metal. MtlArray (ndarr:: MPSNDArray ; storage = Metal. DefaultStorageMode, async = false )
139139 ndims = Int (ndarr. numberOfDimensions)
140140 arrsize = [lengthOfDimension (ndarr,i) for i in 0 : ndims- 1 ]
141141 T = convert (DataType, ndarr. dataType)
142142 arr = MtlArray {T,ndims,storage} (undef, reverse (arrsize)... )
143143 dev = device (arr)
144144
145- cmdBuf = MTLCommandBuffer (global_queue (dev))
146-
147- exportDataWithCommandBuffer (ndarr, cmdBuf, arr. data[], T, 0 , collect (sizeof (T) .* reverse (strides (arr))))
148-
149- commit! (cmdBuf)
150- wait_completed (cmdBuf)
145+ cmdBuf = MTLCommandBuffer (global_queue (dev)) do cmdBuf
146+ exportDataWithCommandBuffer (ndarr, cmdBuf, arr. data[], T, 0 , collect (sizeof (T) .* reverse (strides (arr))))
147+ end
151148
149+ async || wait_completed (cmdBuf)
152150 return arr
153151end
154152
0 commit comments