Skip to content

Commit 84fac7d

Browse files
Merge pull request #1206 from arcaneframework/dev/gg-add-utility-function-to-mark-variables-as-mostly-readonly
Add utility function to mark variables as mostly readonly
2 parents e643e22 + 4f3f171 commit 84fac7d

File tree

5 files changed

+69
-2
lines changed

5 files changed

+69
-2
lines changed

arcane/ceapart/src/arcane/tests/MaterialHeatTestModule.cc

+4-2
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
#include "arcane/core/Item.h"
2222
#include "arcane/core/ITimeLoopMng.h"
2323
#include "arcane/core/IParallelMng.h"
24+
#include "arcane/core/VariableUtils.h"
2425

2526
#include "arcane/materials/MeshMaterialVariableRef.h"
2627
#include "arcane/materials/MeshEnvironmentBuildInfo.h"
@@ -231,6 +232,9 @@ startInit()
231232
m_global_deltat.assign(1.0);
232233
m_mat_temperature.globalVariable().fill(0.0);
233234
m_material_mng->forceRecompute();
235+
_computeCellsCenter();
236+
VariableUtils::markVariableAsMostlyReadOnly(m_cell_center);
237+
VariableUtils::markVariableAsMostlyReadOnly(defaultMesh()->nodesCoordinates());
234238
}
235239

236240
/*---------------------------------------------------------------------------*/
@@ -268,8 +272,6 @@ compute()
268272
void MaterialHeatTestModule::
269273
_compute()
270274
{
271-
_computeCellsCenter();
272-
273275
UniqueArray<MaterialWorkArray> work_arrays(m_heat_objects.size());
274276

275277
// Ajoute de la chaleur à chaque matériau

arcane/src/arcane/core/VariableUtils.cc

+33
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,9 @@
2020
#include "arcane/core/IVariable.h"
2121
#include "arcane/core/VariableRef.h"
2222
#include "arcane/core/internal/IDataInternal.h"
23+
#include "arcane/core/datatype/DataAllocationInfo.h"
24+
#include "arcane/core/materials/MeshMaterialVariableRef.h"
25+
#include "arcane/core/materials/internal/IMeshMaterialVariableInternal.h"
2326

2427
/*---------------------------------------------------------------------------*/
2528
/*---------------------------------------------------------------------------*/
@@ -66,6 +69,36 @@ prefetchVariableAsync(VariableRef& var, RunQueue* queue_or_null)
6669
/*---------------------------------------------------------------------------*/
6770
/*---------------------------------------------------------------------------*/
6871

72+
void VariableUtils::
73+
markVariableAsMostlyReadOnly(IVariable* var)
74+
{
75+
DataAllocationInfo alloc_info(eMemoryLocationHint::HostAndDeviceMostlyRead);
76+
var->setAllocationInfo(alloc_info);
77+
}
78+
79+
/*---------------------------------------------------------------------------*/
80+
/*---------------------------------------------------------------------------*/
81+
82+
void VariableUtils::
83+
markVariableAsMostlyReadOnly(VariableRef& var)
84+
{
85+
return markVariableAsMostlyReadOnly(var.variable());
86+
}
87+
88+
/*---------------------------------------------------------------------------*/
89+
/*---------------------------------------------------------------------------*/
90+
91+
void VariableUtils::
92+
markVariableAsMostlyReadOnly(::Arcane::Materials::MeshMaterialVariableRef& var)
93+
{
94+
auto vars = var.materialVariable()->_internalApi()->variableReferenceList();
95+
for (VariableRef* v : vars)
96+
markVariableAsMostlyReadOnly(v->variable());
97+
}
98+
99+
/*---------------------------------------------------------------------------*/
100+
/*---------------------------------------------------------------------------*/
101+
69102
} // namespace Arcane
70103

71104
/*---------------------------------------------------------------------------*/

arcane/src/arcane/core/VariableUtils.h

+24
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
/*---------------------------------------------------------------------------*/
1616

1717
#include "arcane/core/ArcaneTypes.h"
18+
#include "arcane/core/materials/MaterialsCoreGlobal.h"
1819

1920
/*---------------------------------------------------------------------------*/
2021
/*---------------------------------------------------------------------------*/
@@ -44,6 +45,29 @@ void prefetchVariableAsync(IVariable* var, RunQueue* queue_or_null);
4445
extern "C++" ARCANE_CORE_EXPORT
4546
void prefetchVariableAsync(VariableRef& var, RunQueue* queue_or_null);
4647

48+
/*!
49+
* \brief Indique que la variable est essentiellement en lecture.
50+
*
51+
* Cela est utilisé uniquement avec les accélérateurs et permet d'éviter
52+
* des transferts mémoire en l'accélérateur et le CPU.
53+
*/
54+
extern "C++" ARCANE_CORE_EXPORT
55+
void markVariableAsMostlyReadOnly(IVariable* var);
56+
57+
/*!
58+
* \brief Indique que la variable est essentiellement en lecture.
59+
* \a void markVariableAsMostlyReadOnly(IVariableRef* var);
60+
*/
61+
extern "C++" ARCANE_CORE_EXPORT
62+
void markVariableAsMostlyReadOnly(VariableRef& var);
63+
64+
/*!
65+
* \brief Indique que la variable est essentiellement en lecture.
66+
* \a void markVariableAsMostlyReadOnly(IVariableRef* var);
67+
*/
68+
extern "C++" ARCANE_CORE_EXPORT
69+
void markVariableAsMostlyReadOnly(::Arcane::Materials::MeshMaterialVariableRef& var);
70+
4771
/*---------------------------------------------------------------------------*/
4872
/*---------------------------------------------------------------------------*/
4973

arcane/src/arcane/core/materials/internal/IMeshMaterialVariableInternal.h

+3
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,9 @@ class ARCANE_CORE_EXPORT IMeshMaterialVariableInternal
107107

108108
//! \internal
109109
virtual void initializeNewItems(const ComponentItemListBuilder& list_builder, RunQueue& queue) = 0;
110+
111+
//! Liste des 'VariableRef' associées à cette variable.
112+
virtual ConstArrayView<VariableRef*> variableReferenceList() const =0;
110113
};
111114

112115
/*---------------------------------------------------------------------------*/

arcane/src/arcane/materials/internal/MeshMaterialVariablePrivate.h

+5
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,11 @@ class MeshMaterialVariablePrivate
7878

7979
void initializeNewItems(const ComponentItemListBuilder& list_builder, RunQueue& queue) override;
8080

81+
ConstArrayView<VariableRef*> variableReferenceList() const override
82+
{
83+
return m_refs.view();
84+
}
85+
8186
public:
8287

8388
Int32 m_nb_reference;

0 commit comments

Comments
 (0)