14#include "arcane/materials/IMeshMaterialSynchronizeBuffer.h"
16#include "arcane/utils/UniqueArray.h"
17#include "arcane/utils/PlatformUtils.h"
37 : m_send_buffer(allocator)
38 , m_receive_buffer(allocator)
46 m_send_buffer.
clear();
47 m_receive_buffer.
clear();
49 Int32 m_send_size = 0;
50 Int32 m_receive_size = 0;
58 : m_default_buffer_info(allocator)
62 Int32
nbRank()
const override {
return m_nb_rank; }
66 m_buffer_infos.resize(nb_rank,m_default_buffer_info);
67 for (
auto& x : m_buffer_infos)
72 return m_buffer_infos[index].m_send_buffer;
76 m_buffer_infos[index].m_send_size = new_size;
80 return m_buffer_infos[index].m_receive_buffer;
84 m_buffer_infos[index].m_receive_size = new_size;
89 for (
auto& x : m_buffer_infos) {
90 x.m_send_buffer.resize(x.m_send_size);
91 x.m_receive_buffer.resize(x.m_receive_size);
92 m_total_size += x.m_send_size + x.m_receive_size;
95 Int64
totalSize()
const override {
return m_total_size; }
100 Int64 m_total_size = 0;
101 BufferInfo m_default_buffer_info;
125 return full_buffer.
subspan(m_send_index,m_send_size);
129 return full_buffer.
subspan(m_receive_index,m_receive_size);
132 Int32 m_send_size = 0;
133 Int32 m_receive_size = 0;
134 Int64 m_send_index = 0;
135 Int64 m_receive_index = 0;
141 : m_buffer(allocator){}
144 Int32
nbRank()
const override {
return m_nb_rank; }
148 m_buffer_infos.resize(nb_rank);
149 for (
auto& x : m_buffer_infos)
154 return m_buffer_infos[index].sendBuffer(m_buffer);
158 m_buffer_infos[index].m_send_size = new_size;
162 return m_buffer_infos[index].receiveBuffer(m_buffer);
166 m_buffer_infos[index].m_receive_size = new_size;
170 Int64 total_send_size = 0;
171 Int64 total_receive_size = 0;
172 for (
auto& x : m_buffer_infos) {
173 total_send_size += x.m_send_size;
174 total_receive_size += x.m_receive_size;
176 m_buffer.
resize(total_send_size+total_receive_size);
177 Int64 send_index = 0;
178 Int64 receive_index = total_send_size;
179 for (
auto& x : m_buffer_infos) {
180 x.m_send_index = send_index;
181 x.m_receive_index = receive_index;
182 send_index += x.m_send_size;
183 receive_index += x.m_receive_size;
200extern "C++" ARCANE_MATERIALS_EXPORT Ref<IMeshMaterialSynchronizeBuffer>
201makeMultiBufferMeshMaterialSynchronizeBufferRef(
eMemoryRessource memory_ressource)
205 return makeRef<IMeshMaterialSynchronizeBuffer>(v);
208extern "C++" ARCANE_MATERIALS_EXPORT Ref<IMeshMaterialSynchronizeBuffer>
209makeMultiBufferMeshMaterialSynchronizeBufferRef()
211 return makeMultiBufferMeshMaterialSynchronizeBufferRef(eMemoryRessource::Host);
214extern "C++" ARCANE_MATERIALS_EXPORT Ref<IMeshMaterialSynchronizeBuffer>
215makeOneBufferMeshMaterialSynchronizeBufferRef(
eMemoryRessource memory_ressource)
218 auto* v =
new OneBufferMeshMaterialSynchronizeBuffer(a);
219 return makeRef<IMeshMaterialSynchronizeBuffer>(v);
Fonctions de gestion mémoire et des allocateurs.
void allocate() override
Alloue la mémoire pour les buffers.
void setReceiveBufferSize(Int32 index, Int32 new_size) override
Positionne le nombre d'éléments pour le i-ème buffer de réception.
Span< Byte > sendBuffer(Int32 index) override
Buffer d'envoi pour le i-ème buffer.
Int32 nbRank() const override
Nombre de rangs.
void setNbRank(Int32 nb_rank) override
Positionne le nombre de rangs. Cela invalide les buffers d'envoi et de réception.
Int64 totalSize() const override
Taille totale allouée pour les buffers.
void setSendBufferSize(Int32 index, Int32 new_size) override
Positionne le nombre d'éléments pour le i-ème buffer d'envoi.
Span< Byte > receiveBuffer(Int32 index) override
Buffer d'envoi pour le i-\ème buffer.
Span< Byte > receiveBuffer(Int32 index) override
Buffer d'envoi pour le i-\ème buffer.
Int64 totalSize() const override
Taille totale allouée pour les buffers.
void allocate() override
Alloue la mémoire pour les buffers.
Span< Byte > sendBuffer(Int32 index) override
Buffer d'envoi pour le i-ème buffer.
void setReceiveBufferSize(Int32 index, Int32 new_size) override
Positionne le nombre d'éléments pour le i-ème buffer de réception.
void setNbRank(Int32 nb_rank) override
Positionne le nombre de rangs. Cela invalide les buffers d'envoi et de réception.
Int32 nbRank() const override
Nombre de rangs.
void setSendBufferSize(Int32 index, Int32 new_size) override
Positionne le nombre d'éléments pour le i-ème buffer d'envoi.
Int64 largeSize() const
Nombre d'éléments du vecteur (en 64 bits)
void resize(Int64 s)
Change le nombre d'éléments du tableau à s.
void clear()
Supprime les éléments du tableau.
Interface d'un allocateur pour la mémoire.
Vue d'un tableau d'éléments de type T.
constexpr __host__ __device__ Span< T, DynExtent > subspan(Int64 abegin, Int64 asize) const
Sous-vue à partir de l'élément abegin et contenant asize éléments.
Vecteur 1D de données avec sémantique par valeur (style STL).
Active toujours les traces dans les parties Arcane concernant les matériaux.
IMemoryAllocator * getAllocator(eMemoryResource mem_resource)
Allocateur par défaut pour la ressource mem_resource.
Arccore::eMemoryResource eMemoryRessource
Typedef pour la version Arcane historique (avec 2's')
eMemoryResource
Liste des ressources mémoire disponibles.