Arcane  v3.15.0.0
Documentation développeur
Chargement...
Recherche...
Aucune correspondance
MemoryUtils.cc
1// -*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
2//-----------------------------------------------------------------------------
3// Copyright 2000-2024 CEA (www.cea.fr) IFPEN (www.ifpenergiesnouvelles.com)
4// See the top-level COPYRIGHT file for details.
5// SPDX-License-Identifier: Apache-2.0
6//-----------------------------------------------------------------------------
7/*---------------------------------------------------------------------------*/
8/* MemoryUtils.cc (C) 2000-2024 */
9/* */
10/* Fonctions utilitaires de gestion mémoire. */
11/*---------------------------------------------------------------------------*/
12/*---------------------------------------------------------------------------*/
13
15
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 "arcane/utils/internal/IMemoryRessourceMngInternal.h"
21#include "arcane/utils/internal/MemoryUtilsInternal.h"
22#include "arcane/utils/internal/MemoryResourceMng.h"
23
24/*---------------------------------------------------------------------------*/
25/*---------------------------------------------------------------------------*/
34/*---------------------------------------------------------------------------*/
35/*---------------------------------------------------------------------------*/
36
37namespace Arcane
38{
39
40/*---------------------------------------------------------------------------*/
41/*---------------------------------------------------------------------------*/
42
43namespace
44{
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;
49} // namespace
50
51/*---------------------------------------------------------------------------*/
52/*---------------------------------------------------------------------------*/
53
59
60/*---------------------------------------------------------------------------*/
61/*---------------------------------------------------------------------------*/
62
68
69/*---------------------------------------------------------------------------*/
70/*---------------------------------------------------------------------------*/
71
72eMemoryResource MemoryUtils::
74{
75 eMemoryResource v = eMemoryResource::Unknown;
76 if (name.null())
77 return v;
78 if (name == "Device")
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;
86 else
87 ARCANE_FATAL("Invalid name '{0}' for memory resource. Valid names are "
88 "'Device', 'Host', 'HostPinned' or 'UnifieMemory'.",
89 name);
90 return v;
91}
92
93/*---------------------------------------------------------------------------*/
94/*---------------------------------------------------------------------------*/
95
104
105/*---------------------------------------------------------------------------*/
106/*---------------------------------------------------------------------------*/
107
116
117/*---------------------------------------------------------------------------*/
118/*---------------------------------------------------------------------------*/
119
125
126/*---------------------------------------------------------------------------*/
127/*---------------------------------------------------------------------------*/
128
131{
133 IMemoryAllocator* a = mrm->getAllocator(eMemoryResource::Device, false);
134 if (a)
135 return a;
136 return mrm->getAllocator(eMemoryResource::Host);
137}
138
139/*---------------------------------------------------------------------------*/
140/*---------------------------------------------------------------------------*/
141
147
148/*---------------------------------------------------------------------------*/
149/*---------------------------------------------------------------------------*/
150
153{
154 return getDataMemoryResourceMng()->getAllocator(mem_resource);
155}
156
157/*---------------------------------------------------------------------------*/
158/*---------------------------------------------------------------------------*/
159
160MemoryAllocationOptions MemoryUtils::
162{
163 return MemoryAllocationOptions(getAllocator(mem_resource));
164}
165
166/*---------------------------------------------------------------------------*/
167/*---------------------------------------------------------------------------*/
168
171{
172 return getDefaultDataAllocator(eMemoryLocationHint::HostAndDeviceMostlyRead);
173}
174
175/*---------------------------------------------------------------------------*/
176/*---------------------------------------------------------------------------*/
177
178IMemoryAllocator* MemoryUtils::
179getAcceleratorHostMemoryAllocator()
180{
182}
183
184/*---------------------------------------------------------------------------*/
185/*---------------------------------------------------------------------------*/
186
194
195/*---------------------------------------------------------------------------*/
196/*---------------------------------------------------------------------------*/
197
198Int64 MemoryUtils::impl::
199computeCapacity(Int64 size)
200{
201 double d_size = static_cast<double>(size);
202 double d_new_capacity = d_size * 1.8;
203 if (size > 5000000)
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);
208}
209
210/*---------------------------------------------------------------------------*/
211/*---------------------------------------------------------------------------*/
212
213void MemoryUtils::
215 ConstMemoryView source, eMemoryRessource source_mem, const RunQueue* queue)
216{
218 mrm->_internal()->copy(source, destination_mem, destination, source_mem, queue);
219}
220
221/*---------------------------------------------------------------------------*/
222/*---------------------------------------------------------------------------*/
223
224} // End namespace Arcane
225
226/*---------------------------------------------------------------------------*/
227/*---------------------------------------------------------------------------*/
#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.
Gestion des ressources mémoire pour les CPU et accélérateurs.
virtual IMemoryAllocator * getAllocator(eMemoryResource r)=0
Allocateur mémoire pour la ressource r.
Lecteur des fichiers de maillage via la bibliothèque LIMA.
Definition Lima.cc:149
Options pour configurer les allocations.
Chaîne de caractères unicode.
IMemoryRessourceMng * setDataMemoryResourceMng(IMemoryRessourceMng *mng)
Positionne le gestionnaire de ressource mémoire pour les données.
IMemoryRessourceMng * getDataMemoryResourceMng()
Gestionnaire de ressource mémoire pour les données.
IMemoryAllocator * getDeviceOrHostAllocator()
Retourne l'allocateur sur l'hôte ou sur le device.
IMemoryAllocator * setAcceleratorHostMemoryAllocator(IMemoryAllocator *a)
Positionne l'allocateur spécifique pour les accélérateurs.
MemoryAllocationOptions getAllocatorForMostlyReadOnlyData()
Allocateur par défaut pour les données essentiellement en lecture.
void setDefaultDataMemoryResource(eMemoryResource mem_resource)
Positionne la ressource mémoire utilisée pour l'allocateur mémoire des données.
MemoryAllocationOptions getAllocationOptions(eMemoryResource mem_resource)
Allocation par défaut pour la ressource mem_resource.
IMemoryAllocator * getDefaultDataAllocator()
Allocateur par défaut pour les données.
eMemoryResource getMemoryResourceFromName(const String &name)
Retourne la ressource mémoire par son nom.
IMemoryAllocator * getAllocator(eMemoryResource mem_resource)
Allocateur par défaut pour la ressource mem_resource.
eMemoryResource getDefaultDataMemoryResource()
Ressource mémoire utilisée par l'allocateur par défaut pour les données.
void copy(MutableMemoryView destination, eMemoryResource destination_mem, ConstMemoryView source, eMemoryResource source_mem, const RunQueue *queue=nullptr)
Copie de source vers destination en utilisant la file queue.
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
Arccore::eMemoryResource eMemoryRessource
Typedef pour la version Arcane historique (avec 2's')
Definition UtilsTypes.h:269
eMemoryResource
Liste des ressources mémoire disponibles.