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"
38 if (r == eMemoryResource::Unknown)
40 if (r == eMemoryResource::Host || r == eMemoryResource::UnifiedMemory || r == eMemoryResource::HostPinned)
55 void copy(ConstMemoryView
from, eMemoryResource
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})",
80, m_copier(m_default_memory_copier.get())
86 setAllocator(eMemoryRessource::Host, a);
92int MemoryResourceMng::
93_checkValidResource(eMemoryResource r)
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) {
113 if (
r == eMemoryResource::UnifiedMemory ||
r == eMemoryResource::HostPinned) {
116 a = m_allocators[(
int)eMemoryResource::Host];
121 ARCANE_FATAL(
"Allocator for resource '{0}' is not available",
r);
138void MemoryResourceMng::
141 int x = _checkValidResource(
r);
142 m_allocators[x] = allocator;
148void MemoryResourceMng::
149copy(ConstMemoryView from, eMemoryResource from_mem,
150 MutableMemoryView to, eMemoryResource to_mem,
const RunQueue* queue)
152 Int64 from_size = from.bytes().size();
153 Int64 to_size = to.bytes().size();
154 if (from_size > to_size)
155 ARCANE_FATAL(
"Destination copy is too small (to_size={0} from_size={1})", to_size, from_size);
157 m_copier->
copy(from, from_mem, to, to_mem, queue);
167 eMemoryResource
mem_type = eMemoryResource::Unknown;
#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.
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.
Lecteur des fichiers de maillage via la bibliothèque LIMA.
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.
static AlignedMemoryAllocator * Simd()
Allocateur garantissant l'alignement pour utiliser la vectorisation sur la plateforme cible.
Interface d'un allocateur pour la mémoire.
IMemoryRessourceMng * getDataMemoryResourceMng()
Gestionnaire de ressource mémoire pour les données.
IMemoryAllocator * getDefaultDataAllocator()
Allocateur par défaut pour les données.
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
Arccore::eMemoryResource eMemoryRessource
Typedef pour la version Arcane historique (avec 2's')