Arcane  v3.16.0.0
Documentation utilisateur
Chargement...
Recherche...
Aucune correspondance
CollectionsGlobal.h
1// -*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
2//-----------------------------------------------------------------------------
3// Copyright 2000-2025 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/* CollectionsGlobal.h (C) 2000-2025 */
9/* */
10/* Définitions globales de la composante 'Collections' de 'Arccore'. */
11/*---------------------------------------------------------------------------*/
12#ifndef ARCCORE_COLLECTIONS_COLLECTIONSGLOBAL_H
13#define ARCCORE_COLLECTIONS_COLLECTIONSGLOBAL_H
14/*---------------------------------------------------------------------------*/
15/*---------------------------------------------------------------------------*/
16
17#include "arccore/base/ArccoreGlobal.h"
18
19#include <iosfwd>
20
21/*---------------------------------------------------------------------------*/
22/*---------------------------------------------------------------------------*/
23
24#if defined(ARCCORE_COMPONENT_arccore_collections)
25#define ARCCORE_COLLECTIONS_EXPORT ARCCORE_EXPORT
26#define ARCCORE_COLLECTIONS_EXTERN_TPL
27#else
28#define ARCCORE_COLLECTIONS_EXPORT ARCCORE_IMPORT
29#define ARCCORE_COLLECTIONS_EXTERN_TPL extern
30#endif
31
32/*---------------------------------------------------------------------------*/
33/*---------------------------------------------------------------------------*/
34
35// Pour l'instant on doit laisser ArrayTraits dans le namespace Arccore
36// pour des raisons de compatibilité avec la macro ARCCORE_DEFINE_ARRAY_PODTYPE
37namespace Arccore
38{
39template <typename DataType> class ArrayTraits;
40}
41
42namespace Arcane
43{
48class ArrayImplBase;
49class ArrayMetaData;
52class ArrayDebugInfo;
53template <typename DataType> class ArrayImplT;
54template <typename DataType> class Array;
55template <typename DataType> class AbstractArray;
56template <typename DataType> class UniqueArray;
57template <typename DataType> class SharedArray;
58template <typename DataType> class Array2;
59template <typename DataType> class UniqueArray2;
60template <typename DataType> class SharedArray2;
61using Arccore::ArrayTraits;
62
63// Les trois types suivants sont conservés pour compatibilité avec l'existant.
64// Il faudra les rendre optionnels mi-2025 et les supprimer en 2026
65using IMemoryAllocator3 = IMemoryAllocator;
66using AlignedMemoryAllocator3 = AlignedMemoryAllocator;
67using DefaultMemoryAllocator3 = DefaultMemoryAllocator;
68} // namespace Arcane
69
70namespace Arcane::Accelerator
71{
72class RunQueue;
73};
74
75/*---------------------------------------------------------------------------*/
76/*---------------------------------------------------------------------------*/
77
78namespace Arcane
79{
80using Arcane::Accelerator::RunQueue;
81
82/*---------------------------------------------------------------------------*/
83/*---------------------------------------------------------------------------*/
84
85//! Indices sur la localisation mémoire attendue
86enum class eMemoryLocationHint : int8_t
87{
88 //! Aucune indice
89 None = 0,
90 //! Indique que la donnée sera plutôt utilisée sur accélérateur
92 //! Indique que la donnée sera plutôt utilisée sur CPU
94 /*!
95 * \brief Indique que la donnée sera utilisée à la fois sur accélérateur et
96 * sur CPU et qu'elle ne sera pas souvent modifiée.
97 */
99};
100
101/*---------------------------------------------------------------------------*/
102/*---------------------------------------------------------------------------*/
103/*!
104 * \brief Localisation physique d'une adresse mémoire.
105 *
106 * Pour les valeurs ManagedMemoryDevice et ManagedMemoryHost il s'agit d'une
107 * indication car il n'y a pas de moyen simple de savoir où se trouve
108 * réellement la mémoire.
109 */
110enum class eHostDeviceMemoryLocation : int8_t
111{
112 //! Localisation inconnue
113 Unknown = 0,
114 //! La mémoire est sur accélérateur
115 Device = 1,
116 //! La mémoire est sur l'hôte.
117 Host = 2,
118 //! La mémoire est de la mémoire managée sur accélérateur
120 //! La mémoire est de la mémoire managée sur l'hôte.
122};
123extern "C++" ARCCORE_COLLECTIONS_EXPORT std::ostream&
124operator<<(std::ostream& o, eHostDeviceMemoryLocation r);
125
126/*---------------------------------------------------------------------------*/
127/*---------------------------------------------------------------------------*/
128
129/*!
130 * \brief Liste des ressources mémoire disponibles.
131 */
133{
134 //! Valeur inconnue ou non initialisée
135 Unknown = 0,
136 //! Alloue sur l'hôte.
137 Host,
138 //! Alloue sur l'hôte.
140 //! Alloue sur le device
141 Device,
142 //! Alloue en utilisant la mémoire unifiée.
144};
145
146//! Nombre de valeurs valides pour eMemoryResource
147static constexpr int ARCCORE_NB_MEMORY_RESOURCE = 5;
148
149//! Typedef pour la version Arcane historique (avec 2's')
150// TODO: A rendre obsolète (juin 2025)
152
153/*---------------------------------------------------------------------------*/
154/*---------------------------------------------------------------------------*/
155
156extern "C++" ARCCORE_COLLECTIONS_EXPORT std::ostream&
157operator<<(std::ostream& o, eMemoryResource r);
158
159/*---------------------------------------------------------------------------*/
160/*---------------------------------------------------------------------------*/
161/*!
162 * \brief Informations sur une zone mémoire allouée.
163 */
164class AllocatedMemoryInfo
165{
166 public:
167
168 AllocatedMemoryInfo() = default;
169 explicit AllocatedMemoryInfo(void* base_address)
170 : m_base_address(base_address)
171 {}
172 AllocatedMemoryInfo(void* base_address, Int64 size)
173 : m_base_address(base_address)
174 , m_size(size)
175 , m_capacity(size)
176 {}
177 AllocatedMemoryInfo(void* base_address, Int64 size, Int64 capacity)
178 : m_base_address(base_address)
179 , m_size(size)
180 , m_capacity(capacity)
181 {}
182
183 //! Adresse du début de la zone allouée.
184 void* baseAddress() const { return m_base_address; }
185 //! Taille en octets de la zone mémoire utilisée. (-1) si inconnue
186 Int64 size() const { return m_size; }
187 //! Taille en octets de la zone mémoire allouée. (-1) si inconnue
188 Int64 capacity() const { return m_capacity; }
189
190 public:
191
192 void* m_base_address = nullptr;
193 Int64 m_size = -1;
194 Int64 m_capacity = -1;
195};
196
197/*---------------------------------------------------------------------------*/
198/*---------------------------------------------------------------------------*/
199
200} // namespace Arcane
201
202/*---------------------------------------------------------------------------*/
203/*---------------------------------------------------------------------------*/
204
205namespace Arccore
206{
207
208/*---------------------------------------------------------------------------*/
209/*---------------------------------------------------------------------------*/
210
211using Arcane::AbstractArray;
212using Arcane::AlignedMemoryAllocator;
213using Arcane::AlignedMemoryAllocator3;
214using Arcane::AllocatedMemoryInfo;
215using Arcane::ARCCORE_NB_MEMORY_RESOURCE;
216using Arcane::Array;
217using Arcane::Array2;
218using Arcane::ArrayMetaData;
219using Arcane::DefaultMemoryAllocator;
220using Arcane::DefaultMemoryAllocator3;
224using Arcane::IMemoryAllocator;
225using Arcane::IMemoryAllocator3;
226using Arcane::MemoryAllocationArgs;
227using Arcane::MemoryAllocationOptions;
228using Arcane::PrintableMemoryAllocator;
229using Arcane::SharedArray;
230using Arcane::SharedArray2;
231using Arcane::UniqueArray;
232using Arcane::UniqueArray2;
233
234//! Typedef pour la version Arcane historique (avec 2's')
235// TODO: A rendre obsolète (juin 2025)
237
238/*---------------------------------------------------------------------------*/
239/*---------------------------------------------------------------------------*/
240
241} // namespace Arccore
242
243/*---------------------------------------------------------------------------*/
244/*---------------------------------------------------------------------------*/
245
246#endif
247
File d'exécution pour un accélérateur.
Allocateur mémoire avec alignement mémoire spécifique.
void * baseAddress() const
Adresse du début de la zone allouée.
Int64 size() const
Taille en octets de la zone mémoire utilisée. (-1) si inconnue.
Int64 capacity() const
Taille en octets de la zone mémoire allouée. (-1) si inconnue.
Classe représentant un tableau 2D classique.
Informations de debug pour les classes tableaux.
Classe de base des vecteurs 1D de données.
Classe contenant des informations pour spécialiser les allocations.
Options pour configurer les allocations.
Allocateur mémoire via malloc/realloc/free avec impression listing.
Vecteur de données 2D partagées avec sémantique par référence.
Vecteur 1D de données avec sémantique par référence.
Vecteur de données 2D avec sémantique par valeur (style STL).
Vecteur 1D de données avec sémantique par valeur (style STL).
Caractéristiques pour un tableau.
Definition ArrayTraits.h:42
Espace de nom pour l'utilisation des 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.
eMemoryLocationHint
Indices sur la localisation mémoire attendue.
@ MainlyHost
Indique que la donnée sera plutôt utilisée sur CPU.
@ HostAndDeviceMostlyRead
Indique que la donnée sera utilisée à la fois sur accélérateur et sur CPU et qu'elle ne sera pas souv...
@ MainlyDevice
Indique que la donnée sera plutôt utilisée sur accélérateur.
Arcane::eMemoryResource eMemoryRessource
Typedef pour la version Arcane historique (avec 2's')
eHostDeviceMemoryLocation
Localisation physique d'une adresse mémoire.
@ ManagedMemoryDevice
La mémoire est de la mémoire managée sur accélérateur.
@ ManagedMemoryHost
La mémoire est de la mémoire managée sur l'hôte.
eMemoryResource
Liste des ressources mémoire disponibles.
@ HostPinned
Alloue sur l'hôte.
@ UnifiedMemory
Alloue en utilisant la mémoire unifiée.
std::ostream & operator<<(std::ostream &ostr, eItemKind item_kind)
Opérateur de sortie sur un flot.
Espace de nom de Arccore.
Arcane::eMemoryResource eMemoryRessource
Typedef pour la version Arcane historique (avec 2's')