16#include "arcane/utils/FatalErrorException.h"
17#include "arcane/utils/MemoryAllocator.h"
18#include "arcane/utils/IMemoryRessourceMng.h"
19#include "arcane/utils/String.h"
20#include "arccore/common/internal/IMemoryResourceMngInternal.h"
21#include "arcane/utils/internal/MemoryUtilsInternal.h"
22#include "arcane/utils/internal/MemoryResourceMng.h"
45 IMemoryAllocator* global_accelerator_host_memory_allocator =
nullptr;
46 MemoryResourceMng global_default_data_memory_resource_mng;
47 IMemoryRessourceMng* global_data_memory_resource_mng =
nullptr;
48 eMemoryResource global_data_memory_resource = eMemoryResource::Host;
54eMemoryResource MemoryUtils::
55getDefaultDataMemoryResource()
57 return global_data_memory_resource;
64setDefaultDataMemoryResource(eMemoryResource v)
66 global_data_memory_resource = v;
72eMemoryResource MemoryUtils::
73getMemoryResourceFromName(
const String& name)
75 eMemoryResource v = eMemoryResource::Unknown;
79 v = eMemoryResource::Device;
80 else if (name ==
"Host")
81 v = eMemoryResource::Host;
82 else if (name ==
"HostPinned")
83 v = eMemoryResource::HostPinned;
84 else if (name ==
"UnifiedMemory")
85 v = eMemoryResource::UnifiedMemory;
87 ARCANE_FATAL(
"Invalid name '{0}' for memory resource. Valid names are "
88 "'Device', 'Host', 'HostPinned' or 'UnifieMemory'.",
96IMemoryRessourceMng* MemoryUtils::
97setDataMemoryResourceMng(IMemoryRessourceMng* mng)
100 IMemoryRessourceMng* old = global_data_memory_resource_mng;
101 global_data_memory_resource_mng = mng;
108IMemoryRessourceMng* MemoryUtils::
109getDataMemoryResourceMng()
111 IMemoryRessourceMng* a = global_data_memory_resource_mng;
113 return &global_default_data_memory_resource_mng;
120IMemoryAllocator* MemoryUtils::
121getDefaultDataAllocator()
123 return getDataMemoryResourceMng()->getAllocator(getDefaultDataMemoryResource());
129IMemoryAllocator* MemoryUtils::
130getDeviceOrHostAllocator()
132 IMemoryRessourceMng* mrm = getDataMemoryResourceMng();
133 IMemoryAllocator* a = mrm->getAllocator(eMemoryResource::Device,
false);
136 return mrm->getAllocator(eMemoryResource::Host);
142MemoryAllocationOptions MemoryUtils::
143getDefaultDataAllocator(eMemoryLocationHint hint)
145 return MemoryAllocationOptions(getDefaultDataAllocator(), hint);
151IMemoryAllocator* MemoryUtils::
154 return getDataMemoryResourceMng()->getAllocator(mem_resource);
160MemoryAllocationOptions MemoryUtils::
163 return MemoryAllocationOptions(getAllocator(mem_resource));
169MemoryAllocationOptions MemoryUtils::
170getAllocatorForMostlyReadOnlyData()
172 return getDefaultDataAllocator(eMemoryLocationHint::HostAndDeviceMostlyRead);
181 return global_accelerator_host_memory_allocator;
187IMemoryAllocator* MemoryUtils::
188setAcceleratorHostMemoryAllocator(IMemoryAllocator* a)
190 IMemoryAllocator* old = global_accelerator_host_memory_allocator;
191 global_accelerator_host_memory_allocator = a;
199computeCapacity(
Int64 size)
201 double d_size =
static_cast<double>(size);
202 double d_new_capacity = d_size * 1.8;
204 d_new_capacity = d_size * 1.2;
205 else if (size > 500000)
206 d_new_capacity = d_size * 1.5;
207 return static_cast<Int64>(d_new_capacity);
217 IMemoryRessourceMng* mrm = getDataMemoryResourceMng();
218 mrm->_internal()->copy(source, destination_mem, destination, source_mem, queue);
#define ARCANE_CHECK_POINTER(ptr)
Macro retournant le pointeur ptr s'il est non nul ou lancant une exception s'il est nul.
#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.
Vue constante sur une zone mémoire contigue contenant des éléments de taille fixe.
Vue modifiable sur une zone mémoire contigue contenant des éléments de taille fixe.
Chaîne de caractères unicode.
bool null() const
Retourne true si la chaîne est nulle.
IMemoryAllocator * getAcceleratorHostMemoryAllocator()
Allocateur spécifique pour les accélérateurs.
-*- 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')