8#include <gtest/gtest.h>
10#include "arcane/utils/MemoryView.h"
11#include "arcane/utils/UniqueArray.h"
12#include "arcane/utils/Exception.h"
14#include "arcane/utils/NumericTypes.h"
15#include "arcane/utils/internal/MemoryUtilsInternal.h"
27template <
typename DataType>
30 char _initValue(
Int32 v,
char*)
32 auto x =
static_cast<char>(v + 5);
37 auto x =
static_cast<Int16>(v + 5);
42 auto x =
static_cast<Int32>(v + 5);
47 auto x =
static_cast<Int64>(v + 5);
52 auto x =
static_cast<Real>(v + 5);
58 return Real3(x, x / 2.0, x + 1.5);
64 Real2 b(x - 7.9, x * 2.0);
70 Real3 a(x, x / 2.0, x + 1.5);
71 Real3 b(x - 7.9, x * 2.0, x / 1.5);
72 Real3 c(x + 3.2, x + 4.7, x + 2.5);
80 Int32 nb_value = 1000;
81 DataType* dummy =
nullptr;
83 for (
Int32 i = 0; i < nb_value; ++i) {
84 DataType x = _initValue(i, dummy);
91 MutableMemoryView to(array2.
span());
92 ConstMemoryView from(array1.
span());
94 ASSERT_EQ(array1, array2);
100 unsigned int seed0 = 942244294;
101 std::mt19937 mt1(seed0);
102 auto diff_2 = (mt1.max() - mt1.min()) / 2;
103 for (
Int32 i = 0; i < nb_value; ++i) {
104 auto r = mt1() - mt1.min();
109 std::cout <<
"NB_COPY=" << nb_index <<
"\n";
117 for (
Int32 i = 0; i < nb_index; ++i)
118 array2[i] = array1[copy_indexes[i]];
121 MutableMemoryView to(array3.
span());
122 ConstMemoryView from(array1.
span());
123 to.copyFromIndexesHost(from, copy_indexes);
124 ASSERT_EQ(array2, array3);
125 ConstMemoryView view2(array1.
view());
126 ASSERT_EQ(view2.bytes(),
asBytes(array1));
127 ConstMemoryView view3(array1.
view(), 1);
128 ASSERT_EQ(view3.bytes(),
asBytes(array1));
138 for (
Int32 i = 0; i < nb_value; ++i) {
139 DataType x = _initValue(i + 27, dummy);
144 for (
Int32 i = 0; i < nb_index; ++i)
145 array2[copy_indexes[i]] = array1[i];
147 MutableMemoryView to(array3.
span());
148 ConstMemoryView from(array1.
span());
149 from.copyToIndexesHost(to, copy_indexes);
150 ASSERT_EQ(array2, array3);
172 std::cerr <<
"ERROR=" << ex <<
"\n";
184 ASSERT_EQ(v, expected_mem_resource);
187 ASSERT_EQ(v2, expected_mem_resource);
206 for (Int32 i = 0; i < n; ++i)
Fonctions de gestion mémoire et des allocateurs.
Integer size() const
Nombre d'éléments du vecteur.
ArrayView< T > view() const
Vue mutable sur ce tableau.
Span< const T > span() const
Vue immutable sur ce tableau.
void add(ConstReferenceType val)
Ajoute l'élément val à la fin du tableau.
Classe de base d'une exception.
Classe gérant un vecteur de réel de dimension 2.
Classe gérant une matrice de réel de dimension 2x2.
Classe gérant un vecteur de réel de dimension 3.
Classe gérant une matrice de réel de dimension 3x3.
Vue d'un tableau d'éléments de type T.
Vue d'un tableau d'éléments de type T.
Chaîne de caractères unicode.
Vecteur 1D de données avec sémantique par valeur (style STL).
Concept for allocating, resizing and freeing memory block.
void setDefaultDataMemoryResource(eMemoryResource mem_resource)
Positionne la ressource mémoire utilisée pour l'allocateur mémoire des données.
eMemoryResource getMemoryResourceFromName(const String &name)
Retourne la ressource mémoire par son nom.
eMemoryResource getDefaultDataMemoryResource()
Ressource mémoire utilisée par l'allocateur par défaut pour les données.
void copy(MutableMemoryView destination, eMemoryResource destination_mem, ConstMemoryView source, eMemoryResource source_mem, const RunQueue *queue=nullptr)
Copie de source vers destination en utilisant la file queue.
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
std::int64_t Int64
Type entier signé sur 64 bits.
impl::SpanTypeFromSize< conststd::byte, SizeType >::SpanType asBytes(const SpanImpl< DataType, SizeType, Extent > &s)
Converti la vue en un tableau d'octets non modifiables.
std::int16_t Int16
Type entier signé sur 16 bits.
double Real
Type représentant un réel.
eMemoryResource
Liste des ressources mémoire disponibles.
@ HostPinned
Alloue sur l'hôte.
@ UnifiedMemory
Alloue en utilisant la mémoire unifiée.
@ Device
Alloue sur le device.
std::int32_t Int32
Type entier signé sur 32 bits.