Arcane  v3.15.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-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/* CollectionsGlobal.h (C) 2000-2024 */
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 AlignedMemoryAllocator3;
41class DefaultMemoryAllocator;
42class DefaultMemoryAllocator3;
43class ArrayImplBase;
44class ArrayMetaData;
45class MemoryAllocationArgs;
46class MemoryAllocationOptions;
47class ArrayDebugInfo;
48template<typename DataType> class ArrayTraits;
49template<typename DataType> class ArrayImplT;
50template<typename DataType> class Array;
51template<typename DataType> class AbstractArray;
52template<typename DataType> class UniqueArray;
53template<typename DataType> class SharedArray;
54template<typename DataType> class Array2;
55template<typename DataType> class UniqueArray2;
56template<typename DataType> class SharedArray2;
57}
58
59namespace Arcane::Accelerator
60{
61class RunQueue;
62};
63
64/*---------------------------------------------------------------------------*/
65/*---------------------------------------------------------------------------*/
66
67namespace Arccore
68{
70
71/*---------------------------------------------------------------------------*/
72/*---------------------------------------------------------------------------*/
73
74//! Indices sur la localisation mémoire attendue
75enum class eMemoryLocationHint : int8_t
76{
77 //! Aucune indice
78 None = 0,
79 //! Indique que la donnée sera plutôt utilisée sur accélérateur
80 MainlyDevice = 1,
81 //! Indique que la donnée sera plutôt utilisée sur CPU
82 MainlyHost = 2,
83 /*!
84 * \brief Indique que la donnée sera utilisée à la fois sur accélérateur et
85 * sur CPU et qu'elle ne sera pas souvent modifiée.
86 */
88};
89
90/*---------------------------------------------------------------------------*/
91/*---------------------------------------------------------------------------*/
92/*!
93 * \brief Localisation physique d'une adresse mémoire.
94 *
95 * Pour les valeurs ManagedMemoryDevice et ManagedMemoryHost il s'agit d'une
96 * indication car il n'y a pas de moyen simple de savoir où se trouve
97 * réellement la mémoire.
98 */
99enum class eHostDeviceMemoryLocation : int8_t
100{
101 //! Localisation inconnue
102 Unknown = 0,
103 //! La mémoire est sur accélérateur
104 Device = 1,
105 //! La mémoire est sur l'hôte.
106 Host = 2,
107 //! La mémoire est de la mémoire managée sur accélérateur
109 //! La mémoire est de la mémoire managée sur l'hôte.
111};
112extern "C++" ARCCORE_COLLECTIONS_EXPORT std::ostream&
113operator<<(std::ostream& o, eHostDeviceMemoryLocation r);
114
115/*---------------------------------------------------------------------------*/
116/*---------------------------------------------------------------------------*/
117
118/*!
119 * \brief Liste des ressources mémoire disponibles.
120 */
122{
123 //! Valeur inconnue ou non initialisée
124 Unknown = 0,
125 //! Alloue sur l'hôte.
126 Host,
127 //! Alloue sur l'hôte.
129 //! Alloue sur le device
130 Device,
131 //! Alloue en utilisant la mémoire unifiée.
133};
134
135//! Nombre de valeurs valides pour eMemoryRessource
136static constexpr int ARCCORE_NB_MEMORY_RESOURCE = 5;
137
138/*---------------------------------------------------------------------------*/
139/*---------------------------------------------------------------------------*/
140
141extern "C++" ARCCORE_COLLECTIONS_EXPORT std::ostream&
142operator<<(std::ostream& o, eMemoryResource r);
143
144/*---------------------------------------------------------------------------*/
145/*---------------------------------------------------------------------------*/
146/*!
147 * \brief Informations sur une zone mémoire allouée.
148 */
150{
151 public:
152
153 AllocatedMemoryInfo() = default;
154 explicit AllocatedMemoryInfo(void* base_address)
155 : m_base_address(base_address)
156 {}
157 AllocatedMemoryInfo(void* base_address, Int64 size)
158 : m_base_address(base_address)
159 , m_size(size)
160 , m_capacity(size)
161 {}
162 AllocatedMemoryInfo(void* base_address, Int64 size, Int64 capacity)
163 : m_base_address(base_address)
164 , m_size(size)
165 , m_capacity(capacity)
166 {}
167
168 //! Adresse du début de la zone allouée.
169 void* baseAddress() const { return m_base_address; }
170 //! Taille en octets de la zone mémoire utilisée. (-1) si inconnue
171 Int64 size() const { return m_size; }
172 //! Taille en octets de la zone mémoire allouée. (-1) si inconnue
173 Int64 capacity() const { return m_capacity; }
174
175 public:
176
177 void* m_base_address = nullptr;
178 Int64 m_size = -1;
179 Int64 m_capacity = -1;
180};
181
182/*---------------------------------------------------------------------------*/
183/*---------------------------------------------------------------------------*/
184
185} // namespace Arccore
186
187/*---------------------------------------------------------------------------*/
188/*---------------------------------------------------------------------------*/
189
190#endif
191
File d'exécution pour un accélérateur.
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.
Espace de nom pour l'utilisation des accélérateurs.
Espace de nom de Arccore.
Definition ArcaneTypes.h:24
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.