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 });
217 _getDefaultCopyList(queue)->copyFrom(one_data_size, { indexes, destination.
views(), source.
bytes(), queue });
233 _getDefaultCopyList(queue)->fill(one_data_size, { indexes, destination.
views(), source.
bytes(), queue });
244 _getDefaultCopyList(queue)->fill(one_data_size, { {}, destination.
views(), source.
bytes(), queue });
260 _getDefaultCopyList(queue)->copyTo(one_data_size, { indexes, source.
views(), destination.
bytes(), queue });
266extern "C++" ARCANE_UTILS_EXPORT
void
267arcanePrintSpecificMemoryStats()
#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.
__host__ __device__ void fill(T o)
Remplit le tableau avec la valeur o.
constexpr __host__ __device__ SizeType size() const noexcept
Retourne la taille du tableau.
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 -*-
bool arcaneIsCheck()
Vrai si on est en mode vérification.
std::int64_t Int64
Type entier signé sur 64 bits.
std::int32_t Int32
Type entier signé sur 32 bits.