14#include "arcane/accelerator/core/internal/ReduceMemoryImpl.h"
16#include "arccore/base/CheckedConvert.h"
17#include "arccore/base/PlatformUtils.h"
19#include "arccore/common/MemoryUtils.h"
21#include "arcane/accelerator/core/Runner.h"
22#include "arcane/accelerator/core/Memory.h"
23#include "arcane/accelerator/core/internal/IRunQueueStream.h"
24#include "arcane/accelerator/core/internal/RunCommandImpl.h"
25#include "arcane/accelerator/core/internal/RunnerImpl.h"
30namespace Arcane::Accelerator::impl
51 _allocateMemoryForReduceData(128);
52 _allocateMemoryForGridDeviceCount();
53 m_grid_memory_info.m_warp_size = p->runner()->deviceInfo().warpSize();
59void ReduceMemoryImpl::
62 m_command->releaseReduceMemoryImpl(
this);
68void* ReduceMemoryImpl::
71 auto identity_span = identity_view.
bytes();
72 Int32 data_type_size =
static_cast<Int32>(identity_span.size());
74 if (data_type_size >
m_size)
75 _allocateMemoryForReduceData(data_type_size);
81 m_command->internalStream()->copyMemory(copy_args.addAsync());
89void ReduceMemoryImpl::
90_allocateGridDataMemory()
94 Int32 total_size = CheckedConvert::toInt32(m_data_type_size * m_grid_size);
95 if (total_size <= m_grid_memory_info.m_grid_memory_values.bytes().size())
98 m_grid_buffer.resize(total_size);
101 m_grid_memory_info.m_grid_memory_values = mem_view;
107void ReduceMemoryImpl::
108_allocateMemoryForGridDeviceCount()
112 Int64 size =
sizeof(
unsigned int);
113 const unsigned int zero = 0;
114 m_grid_device_count.resize(1);
115 auto* ptr = m_grid_device_count.data();
117 m_grid_memory_info.m_grid_device_count = ptr;
121 m_command->internalStream()->copyMemory(copy_args);
127void ReduceMemoryImpl::
128copyReduceValueFromDevice()
130 void* destination = m_grid_memory_info.m_host_memory_for_reduced_value;
133 m_command->internalStream()->copyMemory(copy_args);
140internalGetOrCreateReduceMemoryImpl(
RunCommand* command)
142 return command->m_p->getOrCreateReduceMemoryImpl();
Arguments pour la copie mémoire.
Gestion d'une commande sur accélérateur.
Interface de la gestion mémoire pour les réductions.
std::byte * m_device_memory
Pointeur vers la mémoire unifiée contenant la donnée réduite.
Int64 m_data_type_size
Taille de la donnée actuelle.
UniqueArray< std::byte > m_identity_buffer
Buffer pour conserver la valeur de l'identité
Int64 m_size
Taille allouée pour m_device_memory.
Implémentation d'une commande pour accélérateur.
Vue constante sur une zone mémoire contigue contenant des éléments de taille fixe.
constexpr SpanType bytes() const
Vue sous forme d'octets.
ARCCORE_COMMON_EXPORT IMemoryAllocator * getAllocator(eMemoryResource mem_resource)
Allocateur par défaut pour la ressource mem_resource.
std::int64_t Int64
Type entier signé sur 64 bits.
MutableMemoryView makeMutableMemoryView(void *ptr, Int32 datatype_size, Int64 nb_element)
Créé une vue mémoire modifiable.
Arcane::eMemoryResource eMemoryRessource
Typedef pour la version Arcane historique (avec 2's')
@ HostPinned
Alloue sur l'hôte.
std::int32_t Int32
Type entier signé sur 32 bits.