Arcane  v3.15.0.0
Documentation développeur
Chargement...
Recherche...
Aucune correspondance
MemoryUtils.h
Aller à la documentation de ce fichier.
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.h (C) 2000-2024 */
9/* */
10/* Fonctions utilitaires de gestion mémoire. */
11/*---------------------------------------------------------------------------*/
12#ifndef ARCANE_UTILS_MEMORYUTILS_H
13#define ARCANE_UTILS_MEMORYUTILS_H
14/*---------------------------------------------------------------------------*/
15/*---------------------------------------------------------------------------*/
16
17#include "arcane/utils/MemoryRessource.h"
18#include "arcane/utils/MemoryView.h"
19
20#include "arccore/collections/MemoryAllocationArgs.h"
21
22/*---------------------------------------------------------------------------*/
23/*---------------------------------------------------------------------------*/
24
25namespace Arcane::MemoryUtils
26{
27
28/*---------------------------------------------------------------------------*/
29/*---------------------------------------------------------------------------*/
39extern "C++" ARCANE_UTILS_EXPORT eMemoryResource
41
42/*---------------------------------------------------------------------------*/
43/*---------------------------------------------------------------------------*/
53extern "C++" ARCANE_UTILS_EXPORT eMemoryResource
54getMemoryResourceFromName(const String& name);
55
56/*---------------------------------------------------------------------------*/
57/*---------------------------------------------------------------------------*/
72extern "C++" ARCANE_UTILS_EXPORT IMemoryAllocator*
74
75/*---------------------------------------------------------------------------*/
76/*---------------------------------------------------------------------------*/
84extern "C++" ARCANE_UTILS_EXPORT MemoryAllocationOptions
85getDefaultDataAllocator(eMemoryLocationHint hint);
86
87/*---------------------------------------------------------------------------*/
88/*---------------------------------------------------------------------------*/
97extern "C++" ARCANE_UTILS_EXPORT IMemoryAllocator*
99
100/*---------------------------------------------------------------------------*/
101/*---------------------------------------------------------------------------*/
108extern "C++" ARCANE_UTILS_EXPORT MemoryAllocationOptions
110
111/*---------------------------------------------------------------------------*/
112/*---------------------------------------------------------------------------*/
118extern "C++" ARCANE_DEPRECATED_REASON("Y2024: Use getDefaultDataAllocator() instead.")
119ARCANE_UTILS_EXPORT IMemoryAllocator*
121
122/*---------------------------------------------------------------------------*/
123/*---------------------------------------------------------------------------*/
135extern "C++" ARCANE_UTILS_EXPORT MemoryAllocationOptions
137
138/*---------------------------------------------------------------------------*/
139/*---------------------------------------------------------------------------*/
145extern "C++" ARCANE_UTILS_EXPORT IMemoryAllocator*
146getAllocator(eMemoryResource mem_resource);
147
148/*---------------------------------------------------------------------------*/
149/*---------------------------------------------------------------------------*/
150
151namespace impl
152{
154 extern "C++" ARCANE_UTILS_EXPORT Int64
155 computeCapacity(Int64 size);
156} // namespace impl
157
158/*---------------------------------------------------------------------------*/
159/*---------------------------------------------------------------------------*/
173template <typename DataType> inline Int32
175{
176 Int32 ret_value = 0;
177 Int64 s = array.largeSize();
178 if (new_size > s || force_resize) {
179 ret_value = 1;
180 if (new_size > array.capacity()) {
181 array.reserve(impl::computeCapacity(new_size));
182 ret_value = 2;
183 }
184 array.resize(new_size);
185 }
186 return ret_value;
187}
188
189/*---------------------------------------------------------------------------*/
190/*---------------------------------------------------------------------------*/
196template <typename DataType> inline Int32
201
202/*---------------------------------------------------------------------------*/
203/*---------------------------------------------------------------------------*/
211extern "C++" ARCANE_UTILS_EXPORT void
212copy(MutableMemoryView destination, eMemoryResource destination_mem,
213 ConstMemoryView source, eMemoryResource source_mem,
214 const RunQueue* queue = nullptr);
215
216/*---------------------------------------------------------------------------*/
217/*---------------------------------------------------------------------------*/
218
220inline void
221copy(MutableMemoryView destination, ConstMemoryView source, const RunQueue* queue = nullptr)
222{
223 eMemoryResource mem_type = eMemoryResource::Unknown;
224 copy(destination, mem_type, source, mem_type, queue);
225}
226
227/*---------------------------------------------------------------------------*/
228/*---------------------------------------------------------------------------*/
229
231template <typename DataType> inline void
232copy(Span<DataType> destination, Span<const DataType> source, const RunQueue* queue = nullptr)
233{
234 ConstMemoryView input(asBytes(source));
235 MutableMemoryView output(asWritableBytes(destination));
236 copy(output, input, queue);
237}
238
240template <typename DataType> inline void
241copy(SmallSpan<DataType> destination, SmallSpan<const DataType> source, const RunQueue* queue = nullptr)
242{
243 copy(Span<DataType>(destination), Span<const DataType>(source), queue);
244}
245
246/*---------------------------------------------------------------------------*/
247/*---------------------------------------------------------------------------*/
248
249} // namespace Arcane::MemoryUtils
250
251/*---------------------------------------------------------------------------*/
252/*---------------------------------------------------------------------------*/
253
254#endif
File d'exécution pour un accélérateur.
Lecteur des fichiers de maillage via la bibliothèque LIMA.
Definition Lima.cc:149
Options pour configurer les allocations.
Espace de noms pour les fonctions de gestion mémoire et des allocateurs.
IMemoryAllocator * getDeviceOrHostAllocator()
Retourne l'allocateur sur l'hôte ou sur le device.
MemoryAllocationOptions getAllocatorForMostlyReadOnlyData()
Allocateur par défaut pour les données essentiellement en lecture.
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.
Int32 checkResizeArrayWithCapacity(Array< DataType > &array, Int64 new_size, bool force_resize)
Redimensionne un tableau en ajoutant une réserve de mémoire.
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.
eMemoryResource
Liste des ressources mémoire disponibles.