Skip to content

Commit

Permalink
Merge pull request #1206 from arcaneframework/dev/gg-add-utility-func…
Browse files Browse the repository at this point in the history
…tion-to-mark-variables-as-mostly-readonly

Add utility function to mark variables as mostly readonly
  • Loading branch information
grospelliergilles authored Feb 22, 2024
2 parents e643e22 + 4f3f171 commit 84fac7d
Show file tree
Hide file tree
Showing 5 changed files with 69 additions and 2 deletions.
6 changes: 4 additions & 2 deletions arcane/ceapart/src/arcane/tests/MaterialHeatTestModule.cc
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@
#include "arcane/core/Item.h"
#include "arcane/core/ITimeLoopMng.h"
#include "arcane/core/IParallelMng.h"
#include "arcane/core/VariableUtils.h"

#include "arcane/materials/MeshMaterialVariableRef.h"
#include "arcane/materials/MeshEnvironmentBuildInfo.h"
Expand Down Expand Up @@ -231,6 +232,9 @@ startInit()
m_global_deltat.assign(1.0);
m_mat_temperature.globalVariable().fill(0.0);
m_material_mng->forceRecompute();
_computeCellsCenter();
VariableUtils::markVariableAsMostlyReadOnly(m_cell_center);
VariableUtils::markVariableAsMostlyReadOnly(defaultMesh()->nodesCoordinates());
}

/*---------------------------------------------------------------------------*/
Expand Down Expand Up @@ -268,8 +272,6 @@ compute()
void MaterialHeatTestModule::
_compute()
{
_computeCellsCenter();

UniqueArray<MaterialWorkArray> work_arrays(m_heat_objects.size());

// Ajoute de la chaleur à chaque matériau
Expand Down
33 changes: 33 additions & 0 deletions arcane/src/arcane/core/VariableUtils.cc
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,9 @@
#include "arcane/core/IVariable.h"
#include "arcane/core/VariableRef.h"
#include "arcane/core/internal/IDataInternal.h"
#include "arcane/core/datatype/DataAllocationInfo.h"
#include "arcane/core/materials/MeshMaterialVariableRef.h"
#include "arcane/core/materials/internal/IMeshMaterialVariableInternal.h"

/*---------------------------------------------------------------------------*/
/*---------------------------------------------------------------------------*/
Expand Down Expand Up @@ -66,6 +69,36 @@ prefetchVariableAsync(VariableRef& var, RunQueue* queue_or_null)
/*---------------------------------------------------------------------------*/
/*---------------------------------------------------------------------------*/

void VariableUtils::
markVariableAsMostlyReadOnly(IVariable* var)
{
DataAllocationInfo alloc_info(eMemoryLocationHint::HostAndDeviceMostlyRead);
var->setAllocationInfo(alloc_info);
}

/*---------------------------------------------------------------------------*/
/*---------------------------------------------------------------------------*/

void VariableUtils::
markVariableAsMostlyReadOnly(VariableRef& var)
{
return markVariableAsMostlyReadOnly(var.variable());
}

/*---------------------------------------------------------------------------*/
/*---------------------------------------------------------------------------*/

void VariableUtils::
markVariableAsMostlyReadOnly(::Arcane::Materials::MeshMaterialVariableRef& var)
{
auto vars = var.materialVariable()->_internalApi()->variableReferenceList();
for (VariableRef* v : vars)
markVariableAsMostlyReadOnly(v->variable());
}

/*---------------------------------------------------------------------------*/
/*---------------------------------------------------------------------------*/

} // namespace Arcane

/*---------------------------------------------------------------------------*/
Expand Down
24 changes: 24 additions & 0 deletions arcane/src/arcane/core/VariableUtils.h
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
/*---------------------------------------------------------------------------*/

#include "arcane/core/ArcaneTypes.h"
#include "arcane/core/materials/MaterialsCoreGlobal.h"

/*---------------------------------------------------------------------------*/
/*---------------------------------------------------------------------------*/
Expand Down Expand Up @@ -44,6 +45,29 @@ void prefetchVariableAsync(IVariable* var, RunQueue* queue_or_null);
extern "C++" ARCANE_CORE_EXPORT
void prefetchVariableAsync(VariableRef& var, RunQueue* queue_or_null);

/*!
* \brief Indique que la variable est essentiellement en lecture.
*
* Cela est utilisé uniquement avec les accélérateurs et permet d'éviter
* des transferts mémoire en l'accélérateur et le CPU.
*/
extern "C++" ARCANE_CORE_EXPORT
void markVariableAsMostlyReadOnly(IVariable* var);

/*!
* \brief Indique que la variable est essentiellement en lecture.
* \a void markVariableAsMostlyReadOnly(IVariableRef* var);
*/
extern "C++" ARCANE_CORE_EXPORT
void markVariableAsMostlyReadOnly(VariableRef& var);

/*!
* \brief Indique que la variable est essentiellement en lecture.
* \a void markVariableAsMostlyReadOnly(IVariableRef* var);
*/
extern "C++" ARCANE_CORE_EXPORT
void markVariableAsMostlyReadOnly(::Arcane::Materials::MeshMaterialVariableRef& var);

/*---------------------------------------------------------------------------*/
/*---------------------------------------------------------------------------*/

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -107,6 +107,9 @@ class ARCANE_CORE_EXPORT IMeshMaterialVariableInternal

//! \internal
virtual void initializeNewItems(const ComponentItemListBuilder& list_builder, RunQueue& queue) = 0;

//! Liste des 'VariableRef' associées à cette variable.
virtual ConstArrayView<VariableRef*> variableReferenceList() const =0;
};

/*---------------------------------------------------------------------------*/
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -78,6 +78,11 @@ class MeshMaterialVariablePrivate

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

ConstArrayView<VariableRef*> variableReferenceList() const override
{
return m_refs.view();
}

public:

Int32 m_nb_reference;
Expand Down

0 comments on commit 84fac7d

Please sign in to comment.