Skip to content

Commit 04326f1

Browse files
Merge pull request #1793 from arcaneframework/dev/gg-use-viewbuildinfo-for-material-view
Use 'ViewBuildInfo' instead of 'RunCommand' to build material views on accelerator
2 parents 05e8c92 + 17420b3 commit 04326f1

File tree

4 files changed

+89
-50
lines changed

4 files changed

+89
-50
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
// -*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
2+
//-----------------------------------------------------------------------------
3+
// Copyright 2000-2024 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+
/*---------------------------------------------------------------------------*/
8+
/* MaterialVariableViews.cc (C) 2000-2024 */
9+
/* */
10+
/* Gestion des vues sur les variables matériaux pour les accélérateurs. */
11+
/*---------------------------------------------------------------------------*/
12+
/*---------------------------------------------------------------------------*/
13+
14+
#include "arcane/accelerator/MaterialVariableViews.h"
15+
16+
/*---------------------------------------------------------------------------*/
17+
/*---------------------------------------------------------------------------*/
18+
/*!
19+
* \file MaterialVariableViews.h
20+
*
21+
* Ce fichier contient les déclarations des types pour gérer
22+
* les vues pour les accélérateurs des variables du maillage.
23+
*/
24+
/*---------------------------------------------------------------------------*/
25+
/*---------------------------------------------------------------------------*/
26+
27+
namespace Arcane::Accelerator
28+
{
29+
30+
/*---------------------------------------------------------------------------*/
31+
/*---------------------------------------------------------------------------*/
32+
33+
MatVariableViewBase::
34+
MatVariableViewBase(const ViewBuildInfo&, IMeshMaterialVariable*)
35+
{
36+
}
37+
38+
/*---------------------------------------------------------------------------*/
39+
/*---------------------------------------------------------------------------*/
40+
41+
} // namespace Arcane::Accelerator
42+
43+
/*---------------------------------------------------------------------------*/
44+
/*---------------------------------------------------------------------------*/

arcane/src/arcane/accelerator/MaterialVariableViews.h

+43-50
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@
2121
#include "arcane/core/materials/MeshEnvironmentVariableRef.h"
2222
#include "arcane/core/materials/MatItem.h"
2323

24+
#include "arcane/accelerator/AcceleratorGlobal.h"
25+
2426
/*---------------------------------------------------------------------------*/
2527
/*---------------------------------------------------------------------------*/
2628

@@ -38,34 +40,35 @@ namespace Arcane::Accelerator
3840
/*!
3941
* \brief Classe de base des vues sur les variables matériaux.
4042
*/
41-
class MatVariableViewBase
43+
class ARCANE_ACCELERATOR_EXPORT MatVariableViewBase
4244
{
4345
public:
46+
4447
// Pour l'instant n'utilise pas encore les paramètres
45-
MatVariableViewBase(RunCommand&, IMeshMaterialVariable*)
46-
{
47-
}
48-
private:
48+
MatVariableViewBase(const ViewBuildInfo&, IMeshMaterialVariable*);
4949
};
5050

5151
/*---------------------------------------------------------------------------*/
5252
/*---------------------------------------------------------------------------*/
5353
/*!
5454
* \brief Vue en lecture sur une variable scalaire du maillage.
55-
* TODO: Faut-il rajouter la gestion des SIMD comme dans ItemVariableScalarInViewT ?
5655
*/
57-
template<typename ItemType,typename DataType>
56+
template <typename ItemType, typename DataType>
5857
class MatItemVariableScalarInViewT
5958
: public MatVariableViewBase
6059
{
60+
// TODO: Faut-il rajouter la gestion des SIMD comme dans ItemVariableScalarInViewT ?
61+
6162
private:
6263

6364
using ItemIndexType = typename ItemTraitsT<ItemType>::LocalIdType;
6465

6566
public:
6667

67-
MatItemVariableScalarInViewT(RunCommand& cmd, IMeshMaterialVariable* var, ArrayView<DataType>* v)
68-
: MatVariableViewBase(cmd, var), m_value(v){}
68+
MatItemVariableScalarInViewT(const ViewBuildInfo& vbi, IMeshMaterialVariable* var, ArrayView<DataType>* v)
69+
: MatVariableViewBase(vbi, var)
70+
, m_value(v)
71+
{}
6972

7073
//! Opérateur d'accès pour l'entité \a item
7174
ARCCORE_HOST_DEVICE const DataType& operator[](ComponentItemLocalId lid) const
@@ -101,26 +104,12 @@ class MatItemVariableScalarInViewT
101104
ArrayView<DataType>* m_value;
102105
};
103106

104-
/*---------------------------------------------------------------------------*/
105-
/*---------------------------------------------------------------------------*/
106-
107-
/*
108-
* TODO: A faire ?
109-
*
110-
template<typename ItemType,typename DataType>
111-
class MatItemVariableArrayInViewT
112-
: public MatVariableViewBase
113-
{
114-
};
115-
*/
116-
117107
/*---------------------------------------------------------------------------*/
118108
/*---------------------------------------------------------------------------*/
119109
/*!
120110
* \brief Vue en écriture sur une variable scalaire du maillage.
121-
* TODO: Faut il rajouter la gestion des types SIMD comme dans ItemVariableScalarOutViewT ?
122111
*/
123-
template<typename ItemType,typename Accessor>
112+
template <typename ItemType, typename Accessor>
124113
class MatItemVariableScalarOutViewT
125114
: public MatVariableViewBase
126115
{
@@ -130,17 +119,21 @@ class MatItemVariableScalarOutViewT
130119
using DataTypeReturnType = DataType&;
131120
using ItemIndexType = typename ItemTraitsT<ItemType>::LocalIdType;
132121

133-
// TODO: faut il rajouter des ARCANE_CHECK_AT(mvi.arrayIndex(), m_value.size()); ? il manquera tjrs le check sur l'autre dimension
122+
// TODO: faut il rajouter des ARCANE_CHECK_AT(mvi.arrayIndex(), m_value.size());
123+
// il manquera tjrs le check sur l'autre dimension
124+
// TODO: Faut il rajouter la gestion des types SIMD comme dans ItemVariableScalarOutViewT ?
134125

135126
public:
136127

137-
MatItemVariableScalarOutViewT(RunCommand& cmd,IMeshMaterialVariable* var,ArrayView<DataType>* v)
138-
: MatVariableViewBase(cmd, var), m_value(v){}
128+
MatItemVariableScalarOutViewT(const ViewBuildInfo& vbi, IMeshMaterialVariable* var, ArrayView<DataType>* v)
129+
: MatVariableViewBase(vbi, var)
130+
, m_value(v)
131+
{}
139132

140133
//! Opérateur d'accès pour l'entité \a item
141134
ARCCORE_HOST_DEVICE Accessor operator[](ComponentItemLocalId lid) const
142135
{
143-
return Accessor(this->m_value[lid.localId().arrayIndex()].data()+lid.localId().valueIndex());
136+
return Accessor(this->m_value[lid.localId().arrayIndex()].data() + lid.localId().valueIndex());
144137
}
145138

146139
ARCCORE_HOST_DEVICE Accessor operator[](PureMatVarIndex pmvi) const
@@ -151,18 +144,18 @@ class MatItemVariableScalarOutViewT
151144
//! Surcharge pour accéder à la valeure globale à partir du cell id
152145
ARCCORE_HOST_DEVICE Accessor operator[](ItemIndexType item) const
153146
{
154-
ARCANE_CHECK_AT(item.localId(),this->m_value[0].size());
147+
ARCANE_CHECK_AT(item.localId(), this->m_value[0].size());
155148
return Accessor(this->m_value[0].data() + item.localId());
156149
}
157150

158151
//! Opérateur d'accès pour l'entité \a item
159152
ARCCORE_HOST_DEVICE Accessor value(ComponentItemLocalId lid) const
160153
{
161-
return Accessor(this->m_value[lid.localId().arrayIndex()].data()+lid.localId().valueIndex());
154+
return Accessor(this->m_value[lid.localId().arrayIndex()].data() + lid.localId().valueIndex());
162155
}
163156

164157
//! Positionne la valeur pour l'entité \a item à \a v
165-
ARCCORE_HOST_DEVICE void setValue(ComponentItemLocalId lid,const DataType& v) const
158+
ARCCORE_HOST_DEVICE void setValue(ComponentItemLocalId lid, const DataType& v) const
166159
{
167160
this->m_value[lid.localId().arrayIndex()][lid.localId().valueIndex()] = v;
168161
}
@@ -182,47 +175,47 @@ class MatItemVariableScalarOutViewT
182175
/*!
183176
* \brief Vue en écriture pour les variables materiaux scalaire
184177
*/
185-
template<typename DataType> auto
186-
viewOut(RunCommand& cmd, CellMaterialVariableScalarRef<DataType>& var)
178+
template <typename DataType> auto
179+
viewOut(const ViewBuildInfo& vbi, CellMaterialVariableScalarRef<DataType>& var)
187180
{
188181
using Accessor = DataViewSetter<DataType>;
189-
return MatItemVariableScalarOutViewT<Cell,Accessor>(cmd, var.materialVariable(),var._internalValue());
182+
return MatItemVariableScalarOutViewT<Cell, Accessor>(vbi, var.materialVariable(), var._internalValue());
190183
}
191184

192185
/*---------------------------------------------------------------------------*/
193186
/*---------------------------------------------------------------------------*/
194187
/*!
195188
* \brief Vue en écriture pour les variables materiaux scalaire
196189
*/
197-
template<typename DataType> auto
198-
viewOut(RunCommand& cmd, CellEnvironmentVariableScalarRef<DataType>& var)
190+
template <typename DataType> auto
191+
viewOut(const ViewBuildInfo& vbi, CellEnvironmentVariableScalarRef<DataType>& var)
199192
{
200193
using Accessor = DataViewSetter<DataType>;
201-
return MatItemVariableScalarOutViewT<Cell,Accessor>(cmd, var.materialVariable(),var._internalValue());
194+
return MatItemVariableScalarOutViewT<Cell, Accessor>(vbi, var.materialVariable(), var._internalValue());
202195
}
203196

204197
/*---------------------------------------------------------------------------*/
205198
/*---------------------------------------------------------------------------*/
206199
/*!
207200
* \brief Vue en lecture/écriture pour les variables materiaux scalaire
208201
*/
209-
template<typename DataType> auto
210-
viewInOut(RunCommand& cmd, CellMaterialVariableScalarRef<DataType>& var)
202+
template <typename DataType> auto
203+
viewInOut(const ViewBuildInfo& vbi, CellMaterialVariableScalarRef<DataType>& var)
211204
{
212205
using Accessor = DataViewGetterSetter<DataType>;
213-
return MatItemVariableScalarOutViewT<Cell,Accessor>(cmd, var.materialVariable(),var._internalValue());
206+
return MatItemVariableScalarOutViewT<Cell, Accessor>(vbi, var.materialVariable(), var._internalValue());
214207
}
215208

216209
/*---------------------------------------------------------------------------*/
217210
/*---------------------------------------------------------------------------*/
218211
/*!
219212
* \brief Vue en lecture/écriture pour les variables materiaux scalaire
220213
*/
221-
template<typename DataType> auto
222-
viewInOut(RunCommand& cmd, CellEnvironmentVariableScalarRef<DataType>& var)
214+
template <typename DataType> auto
215+
viewInOut(const ViewBuildInfo& vbi, CellEnvironmentVariableScalarRef<DataType>& var)
223216
{
224217
using Accessor = DataViewGetterSetter<DataType>;
225-
return MatItemVariableScalarOutViewT<Cell,Accessor>(cmd, var.materialVariable(),var._internalValue());
218+
return MatItemVariableScalarOutViewT<Cell, Accessor>(vbi, var.materialVariable(), var._internalValue());
226219
}
227220

228221
/*---------------------------------------------------------------------------*/
@@ -231,10 +224,10 @@ viewInOut(RunCommand& cmd, CellEnvironmentVariableScalarRef<DataType>& var)
231224
/*!
232225
* \brief Vue en lecture pour les variables materiaux scalaire
233226
*/
234-
template<typename DataType> auto
235-
viewIn(RunCommand& cmd,const CellMaterialVariableScalarRef<DataType>& var)
227+
template <typename DataType> auto
228+
viewIn(const ViewBuildInfo& vbi, const CellMaterialVariableScalarRef<DataType>& var)
236229
{
237-
return MatItemVariableScalarInViewT<Cell,DataType>(cmd, var.materialVariable(),var._internalValue());
230+
return MatItemVariableScalarInViewT<Cell, DataType>(vbi, var.materialVariable(), var._internalValue());
238231
}
239232

240233
/*---------------------------------------------------------------------------*/
@@ -243,15 +236,15 @@ viewIn(RunCommand& cmd,const CellMaterialVariableScalarRef<DataType>& var)
243236
/*!
244237
* \brief Vue en lecture pour les variables materiaux scalaire
245238
*/
246-
template<typename DataType> auto
247-
viewIn(RunCommand& cmd,const CellEnvironmentVariableScalarRef<DataType>& var)
239+
template <typename DataType> auto
240+
viewIn(const ViewBuildInfo& vbi, const CellEnvironmentVariableScalarRef<DataType>& var)
248241
{
249-
return MatItemVariableScalarInViewT<Cell,DataType>(cmd, var.materialVariable(),var._internalValue());
242+
return MatItemVariableScalarInViewT<Cell, DataType>(vbi, var.materialVariable(), var._internalValue());
250243
}
251244

252245
/*---------------------------------------------------------------------------*/
253246
/*---------------------------------------------------------------------------*/
254247

255-
}
248+
} // namespace Arcane::Accelerator
256249

257250
#endif

arcane/src/arcane/accelerator/VariableViews.h

+1
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
#include "arcane/core/VariableTypedef.h"
2323
#include "arcane/core/GroupIndexTable.h"
2424

25+
#include "arcane/accelerator/core/ViewBuildInfo.h"
2526
#include "arcane/accelerator/AcceleratorGlobal.h"
2627
#include "arcane/accelerator/ViewsCommon.h"
2728

arcane/src/arcane/accelerator/srcs.cmake

+1
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ set( ARCANE_SOURCES
1616
GenericSorter.h
1717
IReduceMemoryImpl.h
1818
MaterialVariableViews.h
19+
MaterialVariableViews.cc
1920
MemoryCopier.cc
2021
NumArray.h
2122
NumArrayViews.h

0 commit comments

Comments
 (0)