Arcane  v3.15.3.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
35namespace Arccore
36{
37class IMemoryAllocator;
38class PrintableMemoryAllocator;
39class AlignedMemoryAllocator;
40class DefaultMemoryAllocator;
41class ArrayImplBase;
42class ArrayMetaData;
43class MemoryAllocationArgs;
44class MemoryAllocationOptions;
45class ArrayDebugInfo;
46template<typename DataType> class ArrayTraits;
47template<typename DataType> class ArrayImplT;
48template<typename DataType> class Array;
49template<typename DataType> class AbstractArray;
50template<typename DataType> class UniqueArray;
51template<typename DataType> class SharedArray;
52template<typename DataType> class Array2;
53template<typename DataType> class UniqueArray2;
54template<typename DataType> class SharedArray2;
55
56// Les trois types suivants sont conservés pour compatibilité avec l'existant.
57// Il faudra les rendre optionnels mi-2025 et les supprimer en 2026
58using IMemoryAllocator3 = IMemoryAllocator;
59using AlignedMemoryAllocator3 = AlignedMemoryAllocator;
60using DefaultMemoryAllocator3 = DefaultMemoryAllocator;
61}
62
63namespace Arcane::Accelerator
64{
65class RunQueue;
66};
67
68/*---------------------------------------------------------------------------*/
69/*---------------------------------------------------------------------------*/
70
71namespace Arccore
72{
74
75/*---------------------------------------------------------------------------*/
76/*---------------------------------------------------------------------------*/
77
78//! Indices sur la localisation mémoire attendue
80{
81 //! Aucune indice
82 None = 0,
83 //! Indique que la donnée sera plutôt utilisée sur accélérateur
84 MainlyDevice = 1,
85 //! Indique que la donnée sera plutôt utilisée sur CPU
86 MainlyHost = 2,
87 /*!
88 * \brief Indique que la donnée sera utilisée à la fois sur accélérateur et
89 * sur CPU et qu'elle ne sera pas souvent modifiée.
90 */
92};
93
94/*---------------------------------------------------------------------------*/
95/*---------------------------------------------------------------------------*/
96/*!
97 * \brief Localisation physique d'une adresse mémoire.
98 *
99 * Pour les valeurs ManagedMemoryDevice et ManagedMemoryHost il s'agit d'une
100 * indication car il n'y a pas de moyen simple de savoir où se trouve
101 * réellement la mémoire.
102 */
104{
105 //! Localisation inconnue
106 Unknown = 0,
107 //! La mémoire est sur accélérateur
108 Device = 1,
109 //! La mémoire est sur l'hôte.
110 Host = 2,
111 //! La mémoire est de la mémoire managée sur accélérateur
113 //! La mémoire est de la mémoire managée sur l'hôte.
115};
116extern "C++" ARCCORE_COLLECTIONS_EXPORT std::ostream&
117operator<<(std::ostream& o, eHostDeviceMemoryLocation r);
118
119/*---------------------------------------------------------------------------*/
120/*---------------------------------------------------------------------------*/
121
122/*!
123 * \brief Liste des ressources mémoire disponibles.
124 */
126{
127 //! Valeur inconnue ou non initialisée
128 Unknown = 0,
129 //! Alloue sur l'hôte.
130 Host,
131 //! Alloue sur l'hôte.
133 //! Alloue sur le device
134 Device,
135 //! Alloue en utilisant la mémoire unifiée.
137};
138
139//! Nombre de valeurs valides pour eMemoryRessource
140static constexpr int ARCCORE_NB_MEMORY_RESOURCE = 5;
141
142/*---------------------------------------------------------------------------*/
143/*---------------------------------------------------------------------------*/
144
145extern "C++" ARCCORE_COLLECTIONS_EXPORT std::ostream&
146operator<<(std::ostream& o, eMemoryResource r);
147
148/*---------------------------------------------------------------------------*/
149/*---------------------------------------------------------------------------*/
150/*!
151 * \brief Informations sur une zone mémoire allouée.
152 */
154{
155 public:
156
157 AllocatedMemoryInfo() = default;
158 explicit AllocatedMemoryInfo(void* base_address)
159 : m_base_address(base_address)
160 {}
162 : m_base_address(base_address)
163 , m_size(size)
164 , m_capacity(size)
165 {}
167 : m_base_address(base_address)
168 , m_size(size)
169 , m_capacity(capacity)
170 {}
171
172 //! Adresse du début de la zone allouée.
173 void* baseAddress() const { return m_base_address; }
174 //! Taille en octets de la zone mémoire utilisée. (-1) si inconnue
175 Int64 size() const { return m_size; }
176 //! Taille en octets de la zone mémoire allouée. (-1) si inconnue
177 Int64 capacity() const { return m_capacity; }
178
179 public:
180
181 void* m_base_address = nullptr;
182 Int64 m_size = -1;
183 Int64 m_capacity = -1;
184};
185
186/*---------------------------------------------------------------------------*/
187/*---------------------------------------------------------------------------*/
188
189} // namespace Arccore
190
191/*---------------------------------------------------------------------------*/
192/*---------------------------------------------------------------------------*/
193
194namespace Arcane
195{
196
197/*---------------------------------------------------------------------------*/
198/*---------------------------------------------------------------------------*/
199
210using Arccore::Array;
214using Arccore::Array2;
218//! Typedef pour la version Arcane historique (avec 2's')
219// TODO: A rendre obsolète (juin 2025)
221
222/*---------------------------------------------------------------------------*/
223/*---------------------------------------------------------------------------*/
224
225}
226
227/*---------------------------------------------------------------------------*/
228/*---------------------------------------------------------------------------*/
229
230#endif
231
File d'exécution pour un accélérateur.
Allocateur mémoire avec alignement mémoire spécifique.
Informations sur une zone mémoire allouée.
Int64 capacity() const
Taille en octets de la zone mémoire allouée. (-1) si inconnue.
Int64 size() const
Taille en octets de la zone mémoire utilisée. (-1) si inconnue.
void * baseAddress() const
Adresse du début de la zone allouée.
Classe représentant un tableau 2D classique.
Caractéristiques pour un tableau.
Definition ArrayTraits.h:42
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.
Référence à une instance.
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).
Espace de nom pour l'utilisation des accélérateurs.
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
Espace de nom de Arccore.
Definition ArcaneTypes.h:29
eHostDeviceMemoryLocation
Localisation physique d'une adresse mémoire.
@ ManagedMemoryDevice
La mémoire est de la mémoire managée sur accélérateur.
@ Host
La mémoire est sur l'hôte.
@ ManagedMemoryHost
La mémoire est de la mémoire managée sur l'hôte.
@ Device
La mémoire est sur accélérateur.
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.
@ Unknown
Donnée de type inconnu ou non initialisé
std::int64_t Int64
Type entier signé sur 64 bits.
eMemoryResource
Liste des ressources mémoire disponibles.
@ HostPinned
Alloue sur l'hôte.
@ UnifiedMemory
Alloue en utilisant la mémoire unifiée.