| #ifndef CAFFE2_UTILS_GPU_ATOMICS_H_ | 
 | #define CAFFE2_UTILS_GPU_ATOMICS_H_ | 
 |  | 
 | #include <cuda_runtime.h> | 
 |  | 
 | namespace caffe2 { | 
 |  | 
 | namespace { | 
 |  | 
 | template <typename T> | 
 | inline __device__ void gpu_atomic_add(T* address, const T val) { | 
 |   atomicAdd(address, val); | 
 | } | 
 |  | 
 | template <> | 
 | inline __device__ void gpu_atomic_add(float* address, const float val) { | 
 | #if defined(USE_ROCM) && defined(__gfx908__) | 
 |   atomicAddNoRet(address, val); | 
 | #else | 
 |   atomicAdd(address, val); | 
 | #endif | 
 | } | 
 |  | 
 | } // namespace | 
 |  | 
 | } // namespace caffe2 | 
 |  | 
 | #endif  // CAFFE2_UTILS_GPU_ATOMICS_H_ |