12#ifndef ARCANE_ACCELERATOR_ATOMIC_H
13#define ARCANE_ACCELERATOR_ATOMIC_H
17#include "arcane/utils/ArcaneCxx20.h"
19#if defined(ARCCORE_DEVICE_TARGET_CUDA) || defined(ARCCORE_DEVICE_TARGET_HIP)
20#include "arcane/accelerator/CommonCudaHipAtomicImpl.h"
36namespace Arcane::Accelerator::impl
39template <enum eAtomicOperation Operation>
41template <enum eAtomicOperation Operation>
49 template <AcceleratorAtomicConcept DataType>
static void
50 apply(DataType*
ptr, DataType value)
52 std::atomic_ref<DataType> v(*
ptr);
62 template <AcceleratorAtomicConcept DataType>
static void
63 apply(DataType*
ptr, DataType value)
65 std::atomic_ref<DataType> v(*
ptr);
77 template <AcceleratorAtomicConcept DataType>
static void
78 apply(DataType*
ptr, DataType value)
80 std::atomic_ref<DataType> v(*
ptr);
90#if defined(ARCANE_COMPILING_SYCL)
97 template <AcceleratorAtomicConcept DataType>
static void
98 apply(DataType*
ptr, DataType value)
100 sycl::atomic_ref<DataType, sycl::memory_order::relaxed, sycl::memory_scope::device> v(*
ptr);
110 template <AcceleratorAtomicConcept DataType>
static void
111 apply(DataType*
ptr, DataType value)
113 sycl::atomic_ref<DataType, sycl::memory_order::relaxed, sycl::memory_scope::device> v(*
ptr);
123 template <AcceleratorAtomicConcept DataType>
static void
124 apply(DataType* ptr, DataType value)
126 sycl::atomic_ref<DataType, sycl::memory_order::relaxed, sycl::memory_scope::device> v(*ptr);
140 template <AcceleratorAtomicConcept DataType, enum eAtomicOperation Operation>
141 ARCCORE_HOST_DEVICE
static inline void
142 doAtomic(DataType*
ptr, DataType value)
144#if defined(ARCCORE_DEVICE_TARGET_CUDA) || defined(ARCCORE_DEVICE_TARGET_HIP)
146#elif defined(ARCCORE_DEVICE_TARGET_SYCL)
153 template <AcceleratorAtomicConcept DataType, enum eAtomicOperation Operation>
154 ARCCORE_HOST_DEVICE
static inline void
173template <enum eAtomicOperation Operation, AcceleratorAtomicConcept DataType,
typename ValueType>
174ARCCORE_HOST_DEVICE
inline void
176requires(std::convertible_to<ValueType, DataType>)
179 impl::AtomicImpl::doAtomic<DataType, Operation>(
ptr, v);
183template <enum eAtomicOperation Operation, AcceleratorAtomicConcept DataType,
typename ValueType>
184ARCCORE_HOST_DEVICE
inline void
186requires(std::convertible_to<ValueType, DataType>)
189 impl::AtomicImpl::doAtomic<DataType, Operation>(view, v);
Lecteur des fichiers de maillage via la bibliothèque LIMA.
Liste des types supportant les opérations atomiques.
Espace de nom pour l'utilisation des accélérateurs.
ARCCORE_HOST_DEVICE void doAtomic(DataType *ptr, ValueType value)
Applique l'opération atomique Operation à la valeur à l'adresse ptr avec la valeur value.
eAtomicOperation
Type d'opération atomique supportée.