14#include "arcane/materials/IMeshMaterialSynchronizeBuffer.h"
16#include "arcane/utils/UniqueArray.h"
17#include "arcane/utils/PlatformUtils.h"
18#include "arcane/utils/IMemoryRessourceMng.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()
214extern "C++" ARCANE_MATERIALS_EXPORT Ref<IMeshMaterialSynchronizeBuffer>
215makeOneBufferMeshMaterialSynchronizeBufferRef(
eMemoryRessource memory_ressource)
218 auto* v =
new OneBufferMeshMaterialSynchronizeBuffer(a);
219 return makeRef<IMeshMaterialSynchronizeBuffer>(v);
virtual IMemoryAllocator * getAllocator(eMemoryRessource r)=0
Allocateur mémoire pour la ressource r.
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.
eMemoryRessource
Liste des ressources mémoire disponibles.