FZGPUModules 2.0
GPU-accelerated modular compression pipelines
Loading...
Searching...
No Matches
atomics.h
Go to the documentation of this file.
1#pragma once
2
38#include "backend/api.h"
39
40namespace fz {
41namespace backend {
42
43#if defined(FZGMOD_BACKEND_HIP)
44
46template <typename T>
47__device__ inline T atomicAddBlock(T* addr, T val) {
48 return __hip_atomic_fetch_add(addr, val, __ATOMIC_RELAXED,
49 __HIP_MEMORY_SCOPE_WORKGROUP);
50}
51
53template <typename T>
54__device__ inline T atomicOrBlock(T* addr, T val) {
55 return __hip_atomic_fetch_or(addr, val, __ATOMIC_RELAXED,
56 __HIP_MEMORY_SCOPE_WORKGROUP);
57}
58
60template <typename T>
61__device__ inline T atomicMaxBlock(T* addr, T val) {
62 return __hip_atomic_fetch_max(addr, val, __ATOMIC_RELAXED,
63 __HIP_MEMORY_SCOPE_WORKGROUP);
64}
65
66#else // CUDA
67
69template <typename T>
70__device__ inline T atomicAddBlock(T* addr, T val) {
71 return atomicAdd_block(addr, val);
72}
73
75template <typename T>
76__device__ inline T atomicOrBlock(T* addr, T val) {
77 return atomicOr_block(addr, val);
78}
79
81template <typename T>
82__device__ inline T atomicMaxBlock(T* addr, T val) {
83 return atomicMax_block(addr, val);
84}
85
86#endif
87
88} // namespace backend
89} // namespace fz
Backend-neutral spelling of the host-side GPU runtime API.
T atomicMaxBlock(T *addr, T val)
Definition atomics.h:82
T atomicAddBlock(T *addr, T val)
Definition atomics.h:70
T atomicOrBlock(T *addr, T val)
Definition atomics.h:76
Definition algorithms.h:48