asc_atomic_inc
Applicability
Product |
Supported |
|---|---|
Atlas 350 Accelerator Card |
√ |
x |
|
x |
|
x |
|
x |
|
x |
|
x |
Function Usage
Performs an atomic increment operation on the address value in the Unified Buffer or Global Memory. If the address value is greater than or equal to the specified value val, the address value is set to 0. Otherwise, the address value is incremented by 1.
Prototype
1 | inline uint32_t asc_atomic_inc(uint32_t *address, uint32_t val) |
1 | inline uint64_t asc_atomic_inc(uint64_t *address, uint64_t val) |
Parameters
Parameter |
Input/Output |
Description |
|---|---|---|
address |
Output |
Address of the Unified Buffer or Global Memory. |
val |
Input |
Source operand. |
The following describes the memory ranges supported by different data types.
Parameter Data Type |
Supported Memory Space |
|---|---|
uint32_t |
Unified Buffer and Global Memory |
uint64_t |
Global Memory |
Returns
Initial data on the Unified Buffer or Global Memory.
Restrictions
For SIMT programming, this API is not supported.
Header File to Be Included
To use this API, the simt_api/device_atomic_functions.h header file must be included.
1 | #include "simt_api/device_atomic_functions.h" |
Examples
For SIMD and SIMT programming:
1 2 3 4 5 | __simt_vf__ __launch_bounds__(1024) inline void KernelAtomicInc(__gm__ uint32_t* dst, __gm__ uint32_t* src) { int idx = threadIdx.x + blockIdx.x * blockDim.x; asc_atomic_inc(dst + idx, src[idx]); } |