Arcane  v4.1.0.0
Documentation utilisateur
Chargement...
Recherche...
Aucune correspondance
Memory.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/* Memory.h (C) 2000-2025 */
9/* */
10/* Classes de gestion mémoire associées aux accélérateurs. */
11/*---------------------------------------------------------------------------*/
12#ifndef ARCANE_ACCELERATOR_CORE_MEMORY_H
13#define ARCANE_ACCELERATOR_CORE_MEMORY_H
14/*---------------------------------------------------------------------------*/
15/*---------------------------------------------------------------------------*/
16
17#include "arccore/base/MemoryView.h"
18#include "arccore/base/Span.h"
19
20#include "arcane/accelerator/core/DeviceId.h"
21
22/*---------------------------------------------------------------------------*/
23/*---------------------------------------------------------------------------*/
24
25namespace Arcane::Accelerator
26{
27
28/*---------------------------------------------------------------------------*/
29/*---------------------------------------------------------------------------*/
30/*!
31 * \brief Conseils pour la gestion mémoire.
32 */
33enum class eMemoryAdvice
34{
35 //! Aucun conseil
36 None = 0,
37 //! Indique que la zone mémoire est principalement en lecture seule.
39 //! Privilégié le positionnement de la mémoire sur l'accélérateur
41 //! Privilégié le positionnement de la mémoire sur l'hôte.
43 //! Indique que la zone mémoire est accédée par l'accélérateur.
45 //! Indique que la zone mémoire est accédée par l'hôte.
47};
48
49/*---------------------------------------------------------------------------*/
50/*---------------------------------------------------------------------------*/
51
52extern "C++" ARCANE_ACCELERATOR_CORE_EXPORT std::ostream&
53operator<<(std::ostream& o,eMemoryAdvice r);
54
55/*---------------------------------------------------------------------------*/
56/*---------------------------------------------------------------------------*/
57/*!
58 * \brief Arguments pour la copie mémoire.
59 */
60class ARCANE_ACCELERATOR_CORE_EXPORT MemoryCopyArgs
61{
62 private:
63
64 static Span<const std::byte> _toSpan(const void* ptr, Int64 length)
65 {
66 return { reinterpret_cast<const std::byte*>(ptr), length };
67 }
68 static Span<std::byte> _toSpan(void* ptr, Int64 length)
69 {
70 return { reinterpret_cast<std::byte*>(ptr), length };
71 }
72
73 public:
74
75 //! Copie \a length octets depuis \a source vers \a destination
76 MemoryCopyArgs(void* destination, const void* source, Int64 length)
77 : MemoryCopyArgs(_toSpan(destination, length),_toSpan(source, length))
78 {}
79
80 //! Copie \a source.size() octets depuis \a source vers \a destination
82 : m_source(source)
83 , m_destination(destination)
84 {
85 // TODO: vérifier destination.size() > source.size();
86 }
87
88 //! Copie depuis \a source vers \a destination
90 : m_source(source)
91 , m_destination(destination)
92 {}
93
94 public:
95
96 MemoryCopyArgs& addAsync()
97 {
98 m_is_async = true;
99 return (*this);
100 }
101 MemoryCopyArgs& addAsync(bool v)
102 {
103 m_is_async = v;
104 return (*this);
105 }
106 ConstMemoryView source() const { return m_source; }
107 MutableMemoryView destination() const { return m_destination; }
108 bool isAsync() const { return m_is_async; }
109
110 private:
111
112 ConstMemoryView m_source;
113 MutableMemoryView m_destination;
114 bool m_is_async = false;
115};
116
117/*---------------------------------------------------------------------------*/
118/*---------------------------------------------------------------------------*/
119/*!
120 * \brief Arguments pour le préfetching mémoire.
121 */
122class ARCANE_ACCELERATOR_CORE_EXPORT MemoryPrefetchArgs
123{
124 private:
125
126 static Span<const std::byte> _toSpan(const void* ptr, Int64 length)
127 {
128 return { reinterpret_cast<const std::byte*>(ptr), length };
129 }
130 /*static Span<std::byte> _toSpan(void* ptr, Int64 length)
131 {
132 return { reinterpret_cast<std::byte*>(ptr), length };
133 }*/
134
135 public:
136
137 //! Prefetch \a length octets depuis \a source
138 MemoryPrefetchArgs(const void* source, Int64 length)
139 : MemoryPrefetchArgs(_toSpan(source, length))
140 {}
141
142 //! Prefetch \a source
144 : m_source(source)
145 {}
146
147 //! Prefetch \a source
149 : m_source(ConstMemoryView(source))
150 {}
151
152 public:
153
154 MemoryPrefetchArgs& addAsync()
155 {
156 m_is_async = true;
157 return (*this);
158 }
159 MemoryPrefetchArgs& addAsync(bool v)
160 {
161 m_is_async = v;
162 return (*this);
163 }
164 MemoryPrefetchArgs& addDeviceId(DeviceId v)
165 {
166 m_device_id = v;
167 return (*this);
168 }
169 ConstMemoryView source() const { return m_source; }
170 bool isAsync() const { return m_is_async; }
171 DeviceId deviceId() const { return m_device_id; }
172
173 private:
174
175 ConstMemoryView m_source;
176 DeviceId m_device_id;
177 bool m_is_async = false;
178};
179
180/*---------------------------------------------------------------------------*/
181/*---------------------------------------------------------------------------*/
182
183} // End namespace Arcane::Accelerator
184
185/*---------------------------------------------------------------------------*/
186/*---------------------------------------------------------------------------*/
187
188#endif
Arguments pour la copie mémoire.
Definition Memory.h:61
MemoryCopyArgs(MutableMemoryView destination, ConstMemoryView source)
Copie depuis source vers destination.
Definition Memory.h:89
MemoryCopyArgs(void *destination, const void *source, Int64 length)
Copie length octets depuis source vers destination.
Definition Memory.h:76
MemoryCopyArgs(Span< std::byte > destination, Span< const std::byte > source)
Copie source.size() octets depuis source vers destination.
Definition Memory.h:81
Arguments pour le préfetching mémoire.
Definition Memory.h:123
MemoryPrefetchArgs(Span< const std::byte > source)
Prefetch source.
Definition Memory.h:148
MemoryPrefetchArgs(const void *source, Int64 length)
Prefetch length octets depuis source.
Definition Memory.h:138
MemoryPrefetchArgs(ConstMemoryView source)
Prefetch source.
Definition Memory.h:143
Vue constante sur une zone mémoire contigue contenant des éléments de taille fixe.
Vue modifiable sur une zone mémoire contigue contenant des éléments de taille fixe.
Vue d'un tableau d'éléments de type T.
Definition Span.h:612
Espace de nom pour l'utilisation des accélérateurs.
std::ostream & operator<<(std::ostream &o, eExecutionPolicy exec_policy)
Affiche le nom de la politique d'exécution.
eMemoryAdvice
Conseils pour la gestion mémoire.
Definition Memory.h:34
@ AccessedByHost
Indique que la zone mémoire est accédée par l'hôte.
Definition Memory.h:46
@ PreferredLocationDevice
Privilégié le positionnement de la mémoire sur l'accélérateur.
Definition Memory.h:40
@ MostlyRead
Indique que la zone mémoire est principalement en lecture seule.
Definition Memory.h:38
@ PreferredLocationHost
Privilégié le positionnement de la mémoire sur l'hôte.
Definition Memory.h:42
@ AccessedByDevice
Indique que la zone mémoire est accédée par l'accélérateur.
Definition Memory.h:44
@ None
Aucune politique d'exécution.
std::int64_t Int64
Type entier signé sur 64 bits.