@@ -162,27 +162,29 @@ abstract type AbstractMemoryBackend end
162162struct SVMBackend <: AbstractMemoryBackend end
163163struct USMBackend <: AbstractMemoryBackend end
164164
165- function memory_backend ()
166- return get! (task_local_storage (), :CLMemoryBackend ) do
167- dev = device ()
165+ function default_memory_backend (dev:: Device )
166+ # determine if USM is supported
167+ usm = if usm_supported (dev)
168+ caps = usm_capabilities (dev)
169+ caps. host. access && caps. device. access
170+ else
171+ false
172+ end
168173
169- # determine if USM is supported
170- usm = if usm_supported (dev)
171- caps = usm_capabilities (dev)
172- caps. host. access && caps. device. access
173- else
174- false
174+ # determine if SVM is available (if needed)
175+ if ! usm
176+ caps = svm_capabilities (dev)
177+ if ! caps. coarse_grain_buffer
178+ error (" Device $dev does not support USM or coarse-grained SVM, either of which is required by OpenCL.jl" )
175179 end
180+ end
176181
177- # determine if SVM is available (if needed)
178- if ! usm
179- caps = svm_capabilities (dev)
180- if ! caps. coarse_grain_buffer
181- error (" Device $dev does not support USM or coarse-grained SVM, either of which is required by OpenCL.jl" )
182- end
183- end
182+ usm ? USMBackend () : SVMBackend ()
183+ end
184184
185- usm ? USMBackend () : SVMBackend ()
185+ function memory_backend ()
186+ return get! (task_local_storage (), :CLMemoryBackend ) do
187+ default_memory_backend (device ())
186188 end
187189end
188190
0 commit comments