14#include "arcane/utils/MemoryView.h"
16#include "arcane/utils/FatalErrorException.h"
18#include "arcane/utils/internal/SpecificMemoryCopyList.h"
37 using InterfaceType = ISpecificMemoryCopy;
38 template <
typename DataType,
typename Extent>
using SpecificType = SpecificMemoryCopy<DataType, Extent>;
39 using RefType = SpecificMemoryCopyRef<IndexedCopyTraits>;
56 impl::SpecificMemoryCopyList<impl::IndexedCopyTraits> global_copy_list;
57 impl::ISpecificMemoryCopyList* default_global_copy_list =
nullptr;
59 impl::ISpecificMemoryCopyList* _getDefaultCopyList(
const RunQueue* queue)
61 if (queue && !default_global_copy_list)
62 ARCANE_FATAL(
"No instance of copier is available for RunQueue");
63 if (default_global_copy_list && queue)
64 return default_global_copy_list;
65 return &global_copy_list;
67 Int32 _checkDataTypeSize(
const TraceInfo& trace, Int32 data_size1, Int32 data_size2)
69 if (data_size1 != data_size2)
70 throw FatalErrorException(trace, String::format(
"Datatype size are not equal this={0} v={1}", data_size1, data_size2));
78void impl::ISpecificMemoryCopyList::
79setDefaultCopyListIfNotSet(ISpecificMemoryCopyList* ptr)
81 if (!default_global_copy_list) {
82 default_global_copy_list = ptr;
92 auto b_source = source.
bytes();
93 auto b_destination = destination.
bytes();
94 Int64 source_size = b_source.size();
97 Int64 destination_size = b_destination.size();
98 if (source_size > destination_size)
99 ARCANE_FATAL(
"Destination is too small source_size={0} destination_size={1}",
100 source_size, destination_size);
101 auto* destination_data = b_destination.data();
102 auto* source_data = b_source.data();
105 std::memmove(destination_data, source_data, source_size);
132 auto b_source = source.
bytes();
133 auto b_destination = destination.
bytes();
135 _getDefaultCopyList(queue)->copyFrom(one_data_size, { indexes, b_source, b_destination, queue });
151 auto b_source = source.
bytes();
152 auto b_destination = destination.
bytes();
154 _getDefaultCopyList(queue)->
fill(one_data_size, { indexes, b_source, b_destination, queue });
165 auto b_source = source.
bytes();
166 auto b_destination = destination.
bytes();
168 _getDefaultCopyList(queue)->
fill(one_data_size, { {}, b_source, b_destination, queue });
195 auto b_source = source.
bytes();
196 auto b_destination = destination.
bytes();
198 _getDefaultCopyList(queue)->copyTo(one_data_size, { indexes, b_source, b_destination, queue });
208 return {
bytes, datatype_size, nb_element };
218 return {
bytes, datatype_size, nb_element };
237 _getDefaultCopyList(queue)->copyFrom(one_data_size, { indexes, destination.
views(), source.
bytes(), queue });
253 _getDefaultCopyList(queue)->fill(one_data_size, { indexes, destination.
views(), source.
bytes(), queue });
264 _getDefaultCopyList(queue)->fill(one_data_size, { {}, destination.
views(), source.
bytes(), queue });
280 _getDefaultCopyList(queue)->copyTo(one_data_size, { indexes, source.
views(), destination.
bytes(), queue });
286extern "C++" ARCANE_UTILS_EXPORT
void
287arcanePrintSpecificMemoryStats()
#define ARCANE_CHECK_POINTER(ptr)
Macro retournant le pointeur ptr s'il est non nul ou lancant une exception s'il est nul.
#define ARCANE_FATAL(...)
Macro envoyant une exception FatalErrorException.
Fonctions de gestion mémoire et des allocateurs.
File d'exécution pour un accélérateur.
Vue constante sur une zone mémoire contigue contenant des éléments de taille fixe.
constexpr Int32 datatypeSize() const
Taille du type de donnée associé (1 par défaut)
constexpr SpanType bytes() const
Vue sous forme d'octets.
Liste de vues constantes sur des zones mémoires contigues.
constexpr Int32 datatypeSize() const
Taille du type de donnée associé (1 par défaut)
constexpr SmallSpan< const Span< const std::byte > > views() const
Vues en octets sur la zone mémoire.
Vue modifiable sur une zone mémoire contigue contenant des éléments de taille fixe.
constexpr Int32 datatypeSize() const
Taille du type de donnée associé (1 par défaut)
constexpr SpanType bytes() const
Vue sous forme d'octets.
Liste de vues modifiables sur des zones mémoires contigues.
constexpr Int32 datatypeSize() const
Taille du type de donnée associé (1 par défaut)
constexpr SmallSpan< Span< std::byte > > views() const
Vues en octets sur la zone mémoire.
Vue d'un tableau d'éléments de type T.
constexpr view_type smallView()
Vue constante sur cette vue.
constexpr __host__ __device__ SizeType size() const noexcept
Retourne la taille du tableau.
__host__ __device__ void fill(T o)
Remplit le tableau avec la valeur o.
Vue d'un tableau d'éléments de type T.
void fill(MutableMemoryView destination, ConstMemoryView source, const RunQueue *run_queue=nullptr)
Remplit une zone mémoire avec une valeur.
void copyWithIndexedDestination(MutableMemoryView destination, ConstMemoryView source, SmallSpan< const Int32 > indexes, RunQueue *run_queue=nullptr)
Copie mémoire avec indirection.
void copyHostWithIndexedSource(MutableMemoryView destination, ConstMemoryView source, Span< const Int32 > indexes)
Copie sur l'hôte des données avec indirection.
void fillIndexed(MutableMemoryView destination, ConstMemoryView source, SmallSpan< const Int32 > indexes, const RunQueue *run_queue=nullptr)
Remplit une zone mémoire indexée avec une valeur.
void copyHostWithIndexedDestination(MutableMemoryView destination, ConstMemoryView source, Span< const Int32 > indexes)
Copie dans l'instance les données indexées de v.
void copyHost(MutableMemoryView destination, ConstMemoryView source)
Copie dans destination les données de source.
void copyWithIndexedSource(MutableMemoryView destination, ConstMemoryView source, SmallSpan< const Int32 > indexes, RunQueue *run_queue=nullptr)
Copie sur l'hôte des données avec indirection.
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
MutableMemoryView makeMutableMemoryView(void *ptr, Int32 datatype_size, Int64 nb_element)
Créé une vue mémoire modifiable.
bool arcaneIsCheck()
Vrai si on est en mode vérification.
std::int64_t Int64
Type entier signé sur 64 bits.
ConstMemoryView makeConstMemoryView(const void *ptr, Int32 datatype_size, Int64 nb_element)
Créé une vue mémoire en lecture seule.
std::int32_t Int32
Type entier signé sur 32 bits.