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::
153 Int64 from_size = from.bytes().size();
154 Int64 to_size = to.bytes().size();
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);
165genericCopy(ConstMemoryView from, MutableMemoryView to)
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.
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.
IMemoryRessourceMng * getDataMemoryResourceMng()
Gestionnaire de ressource mémoire pour les données.
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.