14#include "arcane/utils/internal/MemoryResourceMng.h"
16#include "arcane/utils/FatalErrorException.h"
17#include "arcane/utils/PlatformUtils.h"
18#include "arcane/utils/Array.h"
19#include "arcane/utils/MemoryView.h"
20#include "arcane/utils/MemoryAllocator.h"
22#include "arcane/utils/internal/MemoryUtilsInternal.h"
57 [[maybe_unused]]
const RunQueue* queue)
override
62 if (!_isHost(from_mem))
63 ARCANE_FATAL(
"Source buffer is not accessible from host and no copier provided (location={0})",
67 ARCANE_FATAL(
"Destination buffer is not accessible from host and no copier provided (location={0})",
79: m_default_memory_copier(new DefaultHostMemoryCopier())
80, m_copier(m_default_memory_copier.get())
86 setAllocator(eMemoryRessource::Host, a);
92int MemoryResourceMng::
96 if (x <= 0 || x >= Arccore::ARCCORE_NB_MEMORY_RESOURCE)
97 ARCANE_FATAL(
"Invalid value '{0}'. Valid range is '1' to '{1}'", x, Arccore::ARCCORE_NB_MEMORY_RESOURCE - 1);
107 int x = _checkValidResource(r);
112 if (!a && !m_is_accelerator) {
115 a = m_allocators[
static_cast<int>(mem)];
121 if (!a && throw_if_not_found)
122 ARCANE_FATAL(
"Allocator for resource '{0}' is not available", r);
142 int x = _checkValidResource(r);
143 m_allocators[x] = allocator;
149void MemoryResourceMng::
155 if (from_size > to_size)
156 ARCANE_FATAL(
"Destination copy is too small (to_size={0} from_size={1})", to_size, from_size);
158 m_copier->
copy(from, from_mem, to, to_mem, queue);
169 mrm->
_internal()->copy(from, mem_type, to, mem_type,
nullptr);
#define ARCANE_FATAL(...)
Macro envoyant une exception FatalErrorException.
Fonctions de gestion mémoire et des allocateurs.
File d'exécution pour un accélérateur.
static AlignedMemoryAllocator * Simd()
Allocateur garantissant l'alignement pour utiliser la vectorisation sur la plateforme cible.
Vue constante sur une zone mémoire contigue contenant des éléments de taille fixe.
constexpr SpanType bytes() const
Vue sous forme d'octets.
void copy(ConstMemoryView from, eMemoryResource from_mem, MutableMemoryView to, eMemoryResource to_mem, const RunQueue *queue) override
Copie les données de from vers to avec la queue queue.
Interface d'un allocateur pour la mémoire.
Interface pour les copies mémoire avec support des accélérateurs.
virtual void copy(ConstMemoryView from, eMemoryRessource from_mem, MutableMemoryView to, eMemoryRessource to_mem, const RunQueue *queue)=0
Copie les données de from vers to avec la queue queue.
Gestion des ressources mémoire pour les CPU et accélérateurs.
virtual IMemoryRessourceMngInternal * _internal()=0
Interface interne.
void setAllocator(eMemoryResource r, IMemoryAllocator *allocator) override
Positionne l'allocateur pour la ressource r.
static void genericCopy(ConstMemoryView from, MutableMemoryView to)
Copie générique utilisant platform::getDataMemoryRessourceMng()
IMemoryAllocator * getAllocator(eMemoryResource r) override
Allocateur mémoire pour la ressource r.
Vue modifiable sur une zone mémoire contigue contenant des éléments de taille fixe.
constexpr SpanType bytes() const
Vue sous forme d'octets.
constexpr __host__ __device__ SizeType size() const noexcept
Retourne la taille du tableau.
IMemoryRessourceMng * getDataMemoryResourceMng()
Gestionnaire de ressource mémoire pour les données.
void copyHost(MutableMemoryView destination, ConstMemoryView source)
Copie dans destination les données de source.
eMemoryResource getDefaultDataMemoryResource()
Ressource mémoire utilisée par l'allocateur par défaut pour les données.
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
std::int64_t Int64
Type entier signé sur 64 bits.
Arcane::eMemoryResource eMemoryRessource
Typedef pour la version Arcane historique (avec 2's')
eMemoryResource
Liste des ressources mémoire disponibles.
@ HostPinned
Alloue sur l'hôte.
@ Unknown
Valeur inconnue ou non initialisée.
@ UnifiedMemory
Alloue en utilisant la mémoire unifiée.