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;
172 for (
auto& x : m_buffer_infos) {
177 Int64 send_index = 0;
179 for (
auto& x : m_buffer_infos) {
180 x.m_send_index = send_index;
182 send_index += x.m_send_size;
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.
Lecteur des fichiers de maillage via la bibliothèque LIMA.
Interface des buffers pour la synchronisation de variables matériaux.
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.
Active toujours les traces dans les parties Arcane concernant les matériaux.
eMemoryRessource
Liste des ressources mémoire disponibles.