Synchronization Functions#
numba-dpex
only supports some of the SYCL synchronization operations. For
synchronization of all threads in the same thread block, numba-dpex provides
a helper function called numba_dpex.barrier()
. This function implements the
same pattern as barriers in traditional multi-threaded programming: invoking the
function forces a thread to wait until all threads in the block reach the
barrier, at which point it returns control to all its callers.
numba_dpex.barrier()
supports two memory fence options:
numba_dpex.GLOBAL_MEM_FENCE
: The barrier function will queue a memory fence to ensure correct ordering of memory operations to global memory. Using the option can be useful when work-items, for example, write to buffer or image objects and then want to read the updated data. Passing no arguments tonumba_dpex.barrier()
is equivalent to setting the global memory fence option.numba_dpex.LOCAL_MEM_FENCE
: The barrier function will either flush any variables stored in local memory or queue a memory fence to ensure correct ordering of memory operations to local memory.
Note
The numba_dpex.barrier()
function is semantically equivalent to
numba.cuda.syncthreads
.