Alien  1.3.0
Developer documentation
Loading...
Searching...
No Matches
StreamMatrixBuilderInserter.h
1// -*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
2//-----------------------------------------------------------------------------
3// Copyright 2000-2025 CEA (www.cea.fr) IFPEN (www.ifpenergiesnouvelles.com)
4// See the top-level COPYRIGHT file for details.
5// SPDX-License-Identifier: Apache-2.0
6//-----------------------------------------------------------------------------
7#pragma once
8
9#include <alien/ref/AlienRefSemanticPrecomp.h>
10/*---------------------------------------------------------------------------*/
11
12namespace Alien
13{
14using namespace Arccore;
15
16/*---------------------------------------------------------------------------*/
17
18template <typename ValueT>
19class StreamMatrixBuilderT<ValueT>::BaseInserter
20{
21 protected:
22 friend class StreamMatrixBuilderT<ValueT>;
23
24 protected:
25 BaseInserter();
26 BaseInserter(StreamMatrixBuilderT<ValueT>* parent, Integer id);
27 virtual ~BaseInserter();
28
29 public:
31 void init();
32
34 Integer getId() const;
36 Integer size();
38 Integer count();
40 void end();
41
42 protected:
43 void setMatrixValues(ValueT* matrix_values, Integer block_size = 1);
44
45 protected:
46 void _startTimer() {}
47 void _stopTimer() {}
48
49 Integer m_id;
50 Integer m_index;
51 Integer m_current_size;
52 Integer* m_current_k;
53#if defined(WIN32) or defined(__clang__)
54 ValueT* __restrict m_values;
55#else
56 ValueT __restrict__* m_values;
57#endif
58 Integer m_count;
59 Integer m_size;
60 Integer m_block_size;
61 UniqueArray<Integer> m_n;
62 UniqueArray<Integer> m_row_index;
63 UniqueArray<Integer> m_col_index;
65 UniqueArray<Integer> m_data_index;
67};
68
69/*---------------------------------------------------------------------------*/
70/*---------------------------------------------------------------------------*/
71
72template <typename ValueT>
73class StreamMatrixBuilderT<ValueT>::Profiler
74: virtual public StreamMatrixBuilderT<ValueT>::BaseInserter
75{
76 protected:
77 Profiler() {}
78
79 public:
80 void reserve(Integer capacity);
81 void addMatrixEntries(
82 ConstArrayView<Integer> row_index, ConstArrayView<Integer> col_index);
83 void addMatrixEntries(ConstArrayView<Integer> row_indexes,
84 const UniqueArray<ConstArrayView<Integer>>& col_indexes);
85 void addMatrixEntries(ConstArrayView<Integer> row_indexes,
86 UniqueArray2<Integer> col_indexes, ConstArrayView<Integer> stencil_lids,
87 Integer size);
88 void addMatrixEntries(const Integer row_index, ConstArrayView<Integer> col_index);
89 void addMatrixEntry(Integer row_index, Integer col_index);
90};
91
92// /*---------------------------------------------------------------------------*/
93
94template <typename ValueT>
95class StreamMatrixBuilderT<ValueT>::Filler
96: virtual public StreamMatrixBuilderT<ValueT>::BaseInserter
97{
98 protected:
99 Filler() {}
100
101 public:
102 void setData(ConstArrayView<ValueT> values);
103 void setData(ValueT values);
104 void addData(ConstArrayView<ValueT> values);
105 void addData(ConstArrayView<ValueT> values, ValueT factor);
106 void addData(ValueT values);
107 void addMultiData(ValueT value);
108 void addBlockData(ConstArrayView<ValueT> values);
109 void addBlockData(ConstArrayView<ValueT> values, ValueT factor);
110 void addMultiData(ConstArrayView<ValueT> values, Integer size);
111 void addMultiData(ConstArrayView<ValueT> values, ValueT factor, Integer size);
112 Filler& operator++();
113
115 void start();
117 void setEnd();
119 Integer currentSize();
121 bool isBegin();
123 bool isEnd();
125 Integer index();
126};
127
128/*---------------------------------------------------------------------------*/
129
130template <typename ValueT>
131class StreamMatrixBuilderT<ValueT>::Inserter
132: public StreamMatrixBuilderT<ValueT>::Profiler
133, public StreamMatrixBuilderT<ValueT>::Filler
134{
135 private:
136 friend class StreamMatrixBuilderT<ValueT>;
137
138 public:
139 Inserter(StreamMatrixBuilderT* parent, Integer id)
141 {}
142
143 virtual ~Inserter() {}
144
145 private:
146 // Restreint la visibilité des méthodes de Profiler
147 using StreamMatrixBuilderT<ValueT>::Profiler::reserve;
148 using StreamMatrixBuilderT<ValueT>::Profiler::addMatrixEntry;
149 using StreamMatrixBuilderT<ValueT>::Profiler::addMatrixEntries;
150
151 // Restreint la visibilité des méthodes de Filler
152 using StreamMatrixBuilderT<ValueT>::Filler::setData;
153 using StreamMatrixBuilderT<ValueT>::Filler::addData;
154 using StreamMatrixBuilderT<ValueT>::Filler::addMultiData;
155 using StreamMatrixBuilderT<ValueT>::Filler::addBlockData;
156 using StreamMatrixBuilderT<ValueT>::Filler::operator++;
163};
164
165/*---------------------------------------------------------------------------*/
166/*---------------------------------------------------------------------------*/
167
168} // namespace Alien
169
170/*---------------------------------------------------------------------------*/
Integer count()
Nombre de données dans l'inserter.
Integer size()
Nombre d'itération dans l'inserter.
UniqueArray< Integer > m_data_index
positon of entry in the Matrix CSR structure
Integer getId() const
Identifiant de l'inserter dans son StreamMatrixBuilder.
void init()
@ Méthodes visibles de l'extérieur
void end()
Termine l'inserter (déallocation des données).
bool isBegin()
Retourne true si le filler est au début.
bool isEnd()
Retourn true, le filler est à la fin.
Integer index()
Retourne l'index d'itération courante de l'inserter.
void setEnd()
Positionne le filler est à la fin.
void start()
Redémarre le filler au début.
Integer currentSize()
Taille du bloc courant à insérer.
StreamMatrixBuilderT(Matrix &matrix, bool init_and_start=true)
-- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature --
Definition BackEnd.h:17