MLX
 
Loading...
Searching...
No Matches
atomic.h File Reference
#include <metal_atomic>
#include <metal_stdlib>

Go to the source code of this file.

Classes

struct  mlx_atomic< T, typename >
 
struct  mlx_atomic< T, enable_if_t< is_metal_atomic< T > > >
 

Functions

template<typename T, enable_if_t< is_metal_atomic< T >, bool > = true>
METAL_FUNC T mlx_atomic_load_explicit (device mlx_atomic< T > *object, size_t offset)
 
template<typename T, enable_if_t< is_metal_atomic< T >, bool > = true>
METAL_FUNC void mlx_atomic_store_explicit (device mlx_atomic< T > *object, T val, size_t offset)
 
template<typename T, enable_if_t< is_metal_atomic< T >, bool > = true>
METAL_FUNC void mlx_atomic_fetch_and_explicit (device mlx_atomic< T > *object, T val, size_t offset)
 
template<typename T, enable_if_t< is_metal_atomic< T >, bool > = true>
METAL_FUNC void mlx_atomic_fetch_or_explicit (device mlx_atomic< T > *object, T val, size_t offset)
 
template<typename T, enable_if_t< is_metal_atomic< T >, bool > = true>
METAL_FUNC void mlx_atomic_fetch_min_explicit (device mlx_atomic< T > *object, T val, size_t offset)
 
template<typename T, enable_if_t< is_metal_atomic< T >, bool > = true>
METAL_FUNC void mlx_atomic_fetch_max_explicit (device mlx_atomic< T > *object, T val, size_t offset)
 
template<typename T, enable_if_t< is_metal_atomic< T >, bool > = true>
METAL_FUNC void mlx_atomic_fetch_add_explicit (device mlx_atomic< T > *object, T val, size_t offset)
 
template<typename T, enable_if_t< is_metal_atomic< T >, bool > = true>
METAL_FUNC void mlx_atomic_fetch_mul_explicit (device mlx_atomic< T > *object, T val, size_t offset)
 
template<typename T, enable_if_t< is_metal_atomic< T >, bool > = true>
METAL_FUNC bool mlx_atomic_compare_exchange_weak_explicit (device mlx_atomic< T > *object, thread T *expected, T val, size_t offset)
 
template<>
METAL_FUNC void mlx_atomic_fetch_min_explicit< float > (device mlx_atomic< float > *object, float val, size_t offset)
 
template<>
METAL_FUNC void mlx_atomic_fetch_max_explicit< float > (device mlx_atomic< float > *object, float val, size_t offset)
 
template<typename T, enable_if_t<!is_metal_atomic< T >, bool > = true>
METAL_FUNC bool mlx_atomic_compare_exchange_weak_explicit (device mlx_atomic< T > *object, thread uint *expected, uint val, size_t offset)
 

Variables

template<typename T>
constexpr constant bool is_metal_atomic
 

Function Documentation

◆ mlx_atomic_compare_exchange_weak_explicit() [1/2]

template<typename T, enable_if_t< is_metal_atomic< T >, bool > = true>
METAL_FUNC bool mlx_atomic_compare_exchange_weak_explicit ( device mlx_atomic< T > * object,
thread T * expected,
T val,
size_t offset )

◆ mlx_atomic_compare_exchange_weak_explicit() [2/2]

template<typename T, enable_if_t<!is_metal_atomic< T >, bool > = true>
METAL_FUNC bool mlx_atomic_compare_exchange_weak_explicit ( device mlx_atomic< T > * object,
thread uint * expected,
uint val,
size_t offset )

◆ mlx_atomic_fetch_add_explicit()

template<typename T, enable_if_t< is_metal_atomic< T >, bool > = true>
METAL_FUNC void mlx_atomic_fetch_add_explicit ( device mlx_atomic< T > * object,
T val,
size_t offset )

◆ mlx_atomic_fetch_and_explicit()

template<typename T, enable_if_t< is_metal_atomic< T >, bool > = true>
METAL_FUNC void mlx_atomic_fetch_and_explicit ( device mlx_atomic< T > * object,
T val,
size_t offset )

◆ mlx_atomic_fetch_max_explicit()

template<typename T, enable_if_t< is_metal_atomic< T >, bool > = true>
METAL_FUNC void mlx_atomic_fetch_max_explicit ( device mlx_atomic< T > * object,
T val,
size_t offset )

◆ mlx_atomic_fetch_max_explicit< float >()

template<>
METAL_FUNC void mlx_atomic_fetch_max_explicit< float > ( device mlx_atomic< float > * object,
float val,
size_t offset )

◆ mlx_atomic_fetch_min_explicit()

template<typename T, enable_if_t< is_metal_atomic< T >, bool > = true>
METAL_FUNC void mlx_atomic_fetch_min_explicit ( device mlx_atomic< T > * object,
T val,
size_t offset )

◆ mlx_atomic_fetch_min_explicit< float >()

template<>
METAL_FUNC void mlx_atomic_fetch_min_explicit< float > ( device mlx_atomic< float > * object,
float val,
size_t offset )

◆ mlx_atomic_fetch_mul_explicit()

template<typename T, enable_if_t< is_metal_atomic< T >, bool > = true>
METAL_FUNC void mlx_atomic_fetch_mul_explicit ( device mlx_atomic< T > * object,
T val,
size_t offset )

◆ mlx_atomic_fetch_or_explicit()

template<typename T, enable_if_t< is_metal_atomic< T >, bool > = true>
METAL_FUNC void mlx_atomic_fetch_or_explicit ( device mlx_atomic< T > * object,
T val,
size_t offset )

◆ mlx_atomic_load_explicit()

template<typename T, enable_if_t< is_metal_atomic< T >, bool > = true>
METAL_FUNC T mlx_atomic_load_explicit ( device mlx_atomic< T > * object,
size_t offset )

◆ mlx_atomic_store_explicit()

template<typename T, enable_if_t< is_metal_atomic< T >, bool > = true>
METAL_FUNC void mlx_atomic_store_explicit ( device mlx_atomic< T > * object,
T val,
size_t offset )

Variable Documentation

◆ is_metal_atomic

template<typename T>
constant bool is_metal_atomic
constexpr
Initial value:
= _disjunction<
is_same<T, int>,
is_same<T, uint>,
is_same<T, ulong>,
is_same<T, float>>::value