Arcane  v3.16.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
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
174checkResizeArrayWithCapacity(Array<DataType>& array, Int64 new_size, bool force_resize)
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
198{
199 return checkResizeArrayWithCapacity(array, new_size, false);
200}
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{
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
Int64 computeCapacity(Int64 size)
Calcule une capacité adaptée pour une taille de size.
Integer capacity() const
Capacité (nombre d'éléments alloués) du vecteur.
Int64 largeSize() const
Nombre d'éléments du vecteur (en 64 bits)
File d'exécution pour un accélérateur.
Tableau d'items de types quelconques.
void resize(Int64 s)
Change le nombre d'éléments du tableau à s.
void reserve(Int64 new_capacity)
Réserve le mémoire pour new_capacity éléments.
Vue d'un tableau d'éléments de type T.
Definition Span.h:673
Vue d'un tableau d'éléments de type T.
Definition Span.h:513
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 * getAcceleratorHostMemoryAllocator()
Allocateur spécifique pour les accélérateurs.
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.
impl::SpanTypeFromSize< std::byte, SizeType >::SpanType asWritableBytes(const SpanImpl< DataType, SizeType, Extent > &s)
Converti la vue en un tableau d'octets modifiables.
Definition Span.h:919
std::int64_t Int64
Type entier signé sur 64 bits.
eMemoryLocationHint
Indices sur la localisation mémoire attendue.
impl::SpanTypeFromSize< conststd::byte, SizeType >::SpanType asBytes(const SpanImpl< DataType, SizeType, Extent > &s)
Converti la vue en un tableau d'octets non modifiables.
Definition Span.h:884
eMemoryResource
Liste des ressources mémoire disponibles.
@ Unknown
Valeur inconnue ou non initialisée.
std::int32_t Int32
Type entier signé sur 32 bits.