Block-Structured AMR Software Framework
AMReX_GpuAtomic.H File Reference
#include <AMReX_Config.H>
#include <AMReX_GpuQualifiers.H>
#include <AMReX_Functional.H>
#include <AMReX_INT.H>
#include <utility>

Go to the source code of this file.

Classes

struct  amrex::Gpu::AtomicAdd< T >
 
struct  amrex::Gpu::AtomicMin< T >
 
struct  amrex::Gpu::AtomicMax< T >
 
struct  amrex::Gpu::AtomicLogicalAnd< T >
 
struct  amrex::Gpu::AtomicLogicalOr< T >
 

Namespaces

 amrex
 
 amrex::Gpu
 
 amrex::Gpu::Atomic
 
 amrex::Gpu::Atomic::detail
 
 amrex::HostDevice
 
 amrex::HostDevice::Atomic
 

Functions

template<typename R , typename I , typename F >
AMREX_GPU_DEVICE AMREX_FORCE_INLINEamrex::Gpu::Atomic::detail::atomic_op (R *const address, R const val, F const f) noexcept
 
template<typename R , typename I , typename Op , typename Cond >
AMREX_GPU_DEVICE AMREX_FORCE_INLINE bool amrex::Gpu::Atomic::detail::atomic_op_if (R *const address, R const val, Op &&op, Cond &&cond) noexcept
 
template<class T >
AMREX_GPU_DEVICE AMREX_FORCE_INLINEamrex::Gpu::Atomic::Add_device (T *const sum, T const value) noexcept
 
AMREX_GPU_DEVICE AMREX_FORCE_INLINE Long amrex::Gpu::Atomic::Add_device (Long *const sum, Long const value) noexcept
 
template<class T >
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINEamrex::Gpu::Atomic::Add (T *sum, T value) noexcept
 
template<typename T , typename Op , typename Cond , std::enable_if_t< sizeof(T)==sizeof(unsigned int), int > foo = 0>
AMREX_GPU_DEVICE AMREX_FORCE_INLINE bool amrex::Gpu::Atomic::If_device (T *const sum, T const value, Op &&op, Cond &&cond) noexcept
 
template<class T , class Op , class Cond >
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE bool amrex::Gpu::Atomic::If (T *const add, T const value, Op &&op, Cond &&cond) noexcept
 Conditionally perform an atomic operation. More...
 
template<class T >
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE void amrex::Gpu::Atomic::AddNoRet (T *sum, T value) noexcept
 
template<class T >
AMREX_GPU_DEVICE AMREX_FORCE_INLINEamrex::Gpu::Atomic::Min_device (T *const m, T const value) noexcept
 
AMREX_GPU_DEVICE AMREX_FORCE_INLINE float amrex::Gpu::Atomic::Min_device (float *const m, float const value) noexcept
 
AMREX_GPU_DEVICE AMREX_FORCE_INLINE double amrex::Gpu::Atomic::Min_device (double *const m, double const value) noexcept
 
AMREX_GPU_DEVICE AMREX_FORCE_INLINE Long amrex::Gpu::Atomic::Min_device (Long *const m, Long const value) noexcept
 
template<class T >
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINEamrex::Gpu::Atomic::Min (T *const m, T const value) noexcept
 
template<class T >
AMREX_GPU_DEVICE AMREX_FORCE_INLINEamrex::Gpu::Atomic::Max_device (T *const m, T const value) noexcept
 
AMREX_GPU_DEVICE AMREX_FORCE_INLINE float amrex::Gpu::Atomic::Max_device (float *const m, float const value) noexcept
 
AMREX_GPU_DEVICE AMREX_FORCE_INLINE double amrex::Gpu::Atomic::Max_device (double *const m, double const value) noexcept
 
AMREX_GPU_DEVICE AMREX_FORCE_INLINE Long amrex::Gpu::Atomic::Max_device (Long *const m, Long const value) noexcept
 
template<class T >
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINEamrex::Gpu::Atomic::Max (T *const m, T const value) noexcept
 
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE int amrex::Gpu::Atomic::LogicalOr (int *const m, int const value) noexcept
 
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE int amrex::Gpu::Atomic::LogicalAnd (int *const m, int const value) noexcept
 
template<typename T >
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINEamrex::Gpu::Atomic::Exch (T *address, T val) noexcept
 
template<typename T >
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINEamrex::Gpu::Atomic::CAS (T *const address, T compare, T const val) noexcept
 
template<typename T , std::enable_if_t< sizeof(T)==sizeof(int), int > = 0>
AMREX_GPU_DEVICE AMREX_FORCE_INLINEamrex::Gpu::Atomic::Multiply_device (T *const prod, T const value) noexcept
 
template<class T >
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINEamrex::Gpu::Atomic::Multiply (T *const prod, T const value) noexcept
 
template<typename T , std::enable_if_t< sizeof(T)==sizeof(int), int > = 0>
AMREX_GPU_DEVICE AMREX_FORCE_INLINEamrex::Gpu::Atomic::Divide_device (T *const quot, T const value) noexcept
 
template<class T >
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINEamrex::Gpu::Atomic::Divide (T *const quot, T const value) noexcept
 
template<class T >
AMREX_FORCE_INLINE void amrex::HostDevice::Atomic::Add_Host (T *const sum, T const value) noexcept
 
template<class T >
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE void amrex::HostDevice::Atomic::Add (T *const sum, T const value) noexcept