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