16#ifndef TRUSTArray_included
17#define TRUSTArray_included
19#include <Array_base.h>
26#include <TRUSTTabs_forward.h>
33#include <View_Types.h>
40template <
typename EXEC_SPACE >
41constexpr bool is_default_exec_space = std::is_same<EXEC_SPACE, Kokkos::DefaultExecutionSpace>::value;
46template <
typename EXEC_SPACE >
47constexpr bool gpu_enabled_is_host_exec_space = std::is_same<EXEC_SPACE, Kokkos::DefaultHostExecutionSpace>::value &&
48 !std::is_same<Kokkos::DefaultHostExecutionSpace, Kokkos::DefaultExecutionSpace>::value;
79template <
typename _TYPE_,
typename _SIZE_>
101 using Vector_ = std::vector<_TYPE_, TVAlloc<_TYPE_> >;
108 template<
typename _TYPE2_,
typename _SIZE2_>
friend class TRUSTArray;
125 mem_ = std::make_shared<Vector_>(
Vector_(n, (_TYPE_)0));
126 span_ =
Span_(*mem_);
127 data_location_ = std::make_shared<DataLocation>(DataLocation::HostOnly);
139 assert(A.mem_ !=
nullptr || A.span_.empty());
147 if(!(storage_type_ == STORAGE::TEMP_STORAGE && isAllocatedOnDevice(mem_->data())))
148 allocateOnDevice(*
this);
156 inline void resize(_SIZE_ new_size, RESIZE_OPTIONS opt=RESIZE_OPTIONS::COPY_INIT) {
resize_array(new_size, opt); }
157 inline void resize_array(_SIZE_ new_size, RESIZE_OPTIONS opt=RESIZE_OPTIONS::COPY_INIT);
173 inline std::shared_ptr<Vector_>
get_mem() {
return mem_;}
185 inline const _TYPE_ *
addr()
const;
189 inline const _TYPE_ *
data()
const;
198 inline int nb_dim()
const;
238 inline virtual void ref_data(_TYPE_* ptr, _SIZE_ size);
242 inline virtual void resize_tab(_SIZE_ n, RESIZE_OPTIONS opt=RESIZE_OPTIONS::COPY_INIT);
245 inline DataLocation
get_data_location() {
return data_location_ ==
nullptr ? DataLocation::HostOnly : *data_location_; }
246 inline DataLocation
get_data_location()
const {
return data_location_ ==
nullptr ? DataLocation::HostOnly : *data_location_; }
247 inline void set_data_location(DataLocation flag) {
if (data_location_ !=
nullptr) *data_location_ = flag; }
248 inline void set_data_location(DataLocation flag)
const {
if (data_location_ !=
nullptr) *data_location_ = flag; }
249 inline int size_mem() {
return mem_ ==
nullptr ? 0 : (int)mem_->size(); };
268 template<
int _SHAPE_>
269 inline bool check_flattened()
const;
271 template<
int _SHAPE_>
272 std::array<_SIZE_, 4> getDims()
const;
275 inline void CleanMyView()
277 device_view_1_=DeviceView<_TYPE_,1>();
278 device_view_2_=DeviceView<_TYPE_,2>();
279 device_view_3_=DeviceView<_TYPE_,3>();
280 device_view_4_=DeviceView<_TYPE_,4>();
300 template <
int _SHAPE_ = 1,
typename EXEC_SPACE = Kokkos::DefaultExecutionSpace>
301 inline std::enable_if_t<is_default_exec_space<EXEC_SPACE>, ConstView<_TYPE_,_SHAPE_> >
304 template <
int _SHAPE_ = 1,
typename EXEC_SPACE = Kokkos::DefaultExecutionSpace>
305 inline std::enable_if_t<gpu_enabled_is_host_exec_space<EXEC_SPACE>, ConstHostView<_TYPE_,_SHAPE_> >
309 template <
int _SHAPE_ = 1,
typename EXEC_SPACE=Kokkos::DefaultExecutionSpace>
310 inline std::enable_if_t<is_default_exec_space<EXEC_SPACE>, View<_TYPE_,_SHAPE_> >
313 template <
int _SHAPE_ = 1,
typename EXEC_SPACE=Kokkos::DefaultExecutionSpace>
314 inline std::enable_if_t<gpu_enabled_is_host_exec_space<EXEC_SPACE>, HostView<_TYPE_,_SHAPE_> >
318 template <
int _SHAPE_ = 1,
typename EXEC_SPACE=Kokkos::DefaultExecutionSpace>
319 inline std::enable_if_t<is_default_exec_space<EXEC_SPACE>, View<_TYPE_,_SHAPE_> >
322 template <
int _SHAPE_ = 1,
typename EXEC_SPACE=Kokkos::DefaultExecutionSpace>
323 inline std::enable_if_t<gpu_enabled_is_host_exec_space<EXEC_SPACE>, HostView<_TYPE_,_SHAPE_> >
336 template<
int _SHAPE_>
inline void init_device_view()
const;
338 mutable DeviceView<_TYPE_, 1> device_view_1_;
339 mutable DeviceView<_TYPE_, 2> device_view_2_;
340 mutable DeviceView<_TYPE_, 3> device_view_3_;
341 mutable DeviceView<_TYPE_, 4> device_view_4_;
352 std::shared_ptr<Vector_> mem_;
358 STORAGE storage_type_;
367 mutable std::shared_ptr<DataLocation> data_location_;
371 template<
typename _TAB_>
void ref_conv_helper_(_TAB_& out)
const;
376 template<
int _SHAPE_>
377 typename std::enable_if<_SHAPE_ == 1, DeviceView<_TYPE_, 1>>::type& get_device_view()
const {
return device_view_1_; }
380 template<
int _SHAPE_>
381 typename std::enable_if<_SHAPE_ == 2, DeviceView<_TYPE_, 2>>::type& get_device_view()
const {
return device_view_2_; }
384 template<
int _SHAPE_>
385 typename std::enable_if<_SHAPE_ == 3, DeviceView<_TYPE_, 3>>::type& get_device_view()
const {
return device_view_3_; }
388 template<
int _SHAPE_>
389 typename std::enable_if<_SHAPE_ == 4, DeviceView<_TYPE_, 4>>::type& get_device_view()
const {
return device_view_4_; }
399template <
typename _TYPE_>
402using BigArrOfDouble = BigTRUSTArray<double>;
403using BigArrOfInt = BigTRUSTArray<int>;
404using BigArrOfTID = BigTRUSTArray<trustIdType>;
411#include <TRUSTArray_tools.tpp>
417#include <TRUSTArray_device.tpp>
419#include <TRUSTArray_kokkos.tpp>
422#include <TRUSTArray.tpp>
Empty class used as a base for all the arrays.
Class defining operators and methods for all reading operation in an input flow (file,...
int numero() const
Renvoie l'indice de l'objet dans Memoire::data.
static void exit(int exit_code=-1)
Routine de sortie de TRUST dans une region Kokkos.
Classe de base des flux de sortie.
Represents a an array of int/int64/double/... values.
virtual const Span_ get_span_tot() const
void from_tid_to_int(TRUSTArray< int, int > &out) const
void attach_array(const TRUSTArray &a, _SIZE_ start=0, _SIZE_ size=-1)
void resize_array_(_SIZE_ n, RESIZE_OPTIONS opt=RESIZE_OPTIONS::COPY_INIT)
bool checkDataOnDevice(const TRUSTArray &arr)
const _TYPE_ & operator()(_SIZE_ i) const
TRUSTArray & operator=(_TYPE_ x)
TRUSTArray & operator*=(const _TYPE_ dy)
void append_array(_TYPE_ valeur)
void set_data_location(DataLocation flag) const
_SIZE_ size_array() const
_TYPE_ & operator()(_SIZE_ i)
int duplique() const override
virtual void ref_array(TRUSTArray &, _SIZE_ start=0, _SIZE_ sz=-1)
TRUSTArray(const TRUSTArray &A)
DataLocation get_data_location()
void ensureDataOnHost() const
TRUSTArray & operator/=(const _TYPE_ dy)
const _TYPE_ * addr() const
TRUSTArray & operator+=(const _TYPE_ dy)
TRUSTArray & inject_array(const TRUSTArray &source, _SIZE_ nb_elements=-1, _SIZE_ first_element_dest=0, _SIZE_ first_element_source=0)
void ref_as_big(TRUSTArray< _TYPE_, trustIdType > &out) const
unsigned taille_memoire() const override
bool checkDataOnDevice() const
const _TYPE_ * data() const
DataLocation get_data_location() const
TRUSTArray & operator+=(const TRUSTArray &y)
STORAGE get_mem_storage() const
TRUSTArray & copy_array(const TRUSTArray &a)
TRUSTArray & operator-=(const TRUSTArray &y)
std::shared_ptr< Vector_ > get_mem()
virtual void resize_tab(_SIZE_ n, RESIZE_OPTIONS opt=RESIZE_OPTIONS::COPY_INIT)
void set_mem_storage(const STORAGE storage)
void ref_as_small(TRUSTArray< _TYPE_, int > &out) const
virtual const Span_ get_span() const
std::vector< idx_t, TVAlloc< idx_t > > Vector_
typename tcb::span< idx_t >::iterator Iterator_
virtual Span_ get_span_tot()
_TYPE_ & operator[](_SIZE_ i)
void resize_array(_SIZE_ new_size, RESIZE_OPTIONS opt=RESIZE_OPTIONS::COPY_INIT)
void set_data_location(DataLocation flag)
virtual _SIZE_ dimension_tot(int) const
const _TYPE_ & operator[](_SIZE_ i) const
const Iterator_ end() const
friend class TRUSTArrayKokkos
void resize(_SIZE_ new_size, RESIZE_OPTIONS opt=RESIZE_OPTIONS::COPY_INIT)
bool isDataOnDevice() const
TRUSTArray & operator=(const TRUSTArray &)
Entree & readOn(Entree &is) override
Lecture d'un Objet_U sur un flot d'entree Methode a surcharger.
virtual void ref_data(_TYPE_ *ptr, _SIZE_ size)
TRUSTArray & operator-=(const _TYPE_ dy)
const Iterator_ begin() const
Sortie & printOn(Sortie &os) const override
Ecriture de l'objet sur un flot de sortie Methode a surcharger.