Skip to content

Commit e452693

Browse files
Merge pull request #1204 from arcaneframework/dev/gg-add-acceleratormng-to-variablemng-and-meshmaterialmng
Add instance of 'IAcceleratorMng' in 'VariableMng' and 'MeshMaterialMng'
2 parents bce264a + d84b2c7 commit e452693

File tree

6 files changed

+59
-21
lines changed

6 files changed

+59
-21
lines changed

arcane/src/arcane/core/internal/IVariableMngInternal.h

+19-13
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
// -*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
22
//-----------------------------------------------------------------------------
3-
// Copyright 2000-2023 CEA (www.cea.fr) IFPEN (www.ifpenergiesnouvelles.com)
3+
// Copyright 2000-2024 CEA (www.cea.fr) IFPEN (www.ifpenergiesnouvelles.com)
44
// See the top-level COPYRIGHT file for details.
55
// SPDX-License-Identifier: Apache-2.0
66
//-----------------------------------------------------------------------------
77
/*---------------------------------------------------------------------------*/
8-
/* IVariableMngInternal.h (C) 2000-2023 */
8+
/* IVariableMngInternal.h (C) 2000-2024 */
99
/* */
1010
/* Partie interne à Arcane de IVariableMng. */
1111
/*---------------------------------------------------------------------------*/
@@ -49,21 +49,21 @@ class ARCANE_CORE_EXPORT IVariableMngInternal
4949
* appelée. Cette méthode doit être appelée avant initialize().
5050
* \warning Cette méthode ne doit être appelée qu'une seule fois.
5151
*/
52-
virtual void build() =0;
52+
virtual void build() = 0;
5353

5454
/*!
5555
* \brief Initialise l'instance.
5656
* L'instance n'est pas utilisable tant que cette méthode n'a pas été
5757
* appelée.
5858
* \warning Cette méthode ne doit être appelée qu'une seule fois.
5959
*/
60-
virtual void initialize() =0;
60+
virtual void initialize() = 0;
6161

6262
//! Supprime et détruit les variables gérées par ce gestionnaire
63-
virtual void removeAllVariables() =0;
63+
virtual void removeAllVariables() = 0;
6464

6565
//! Détache les variables associées au maillage \a mesh.
66-
virtual void detachMeshVariables(IMesh* mesh) =0;
66+
virtual void detachMeshVariables(IMesh* mesh) = 0;
6767

6868
public:
6969

@@ -76,7 +76,7 @@ class ARCANE_CORE_EXPORT IVariableMngInternal
7676
* \pre var ne doit pas déjà être référencée.
7777
* \return l'implémentation associée à \a var.
7878
*/
79-
virtual void addVariableRef(VariableRef* var) =0;
79+
virtual void addVariableRef(VariableRef* var) = 0;
8080

8181
/*!
8282
* \brief Supprime une référence à une variable.
@@ -86,7 +86,7 @@ class ARCANE_CORE_EXPORT IVariableMngInternal
8686
* Si \a var n'est pas référencée par le gestionnaire, rien n'est effectué.
8787
* \pre var != 0
8888
*/
89-
virtual void removeVariableRef(VariableRef* var) =0;
89+
virtual void removeVariableRef(VariableRef* var) = 0;
9090

9191
/*!
9292
* \brief Ajoute une variable.
@@ -99,7 +99,7 @@ class ARCANE_CORE_EXPORT IVariableMngInternal
9999
* \pre var ne doit pas déjà être référencée.
100100
* \return l'implémentation associée à \a var.
101101
*/
102-
virtual void addVariable(IVariable* var) =0;
102+
virtual void addVariable(IVariable* var) = 0;
103103

104104
/*!
105105
* \brief Supprime une variable.
@@ -111,8 +111,8 @@ class ARCANE_CORE_EXPORT IVariableMngInternal
111111
* \pre var != 0
112112
* \pre var doit avoir une seule référence.
113113
*/
114-
virtual void removeVariable(IVariable* var) =0;
115-
114+
virtual void removeVariable(IVariable* var) = 0;
115+
116116
/*!
117117
* \brief Initialise les variables.
118118
*
@@ -121,12 +121,18 @@ class ARCANE_CORE_EXPORT IVariableMngInternal
121121
*
122122
* \param is_continue \a true vrai si on est en reprise.
123123
*/
124-
virtual void initializeVariables(bool is_continue) =0;
124+
virtual void initializeVariables(bool is_continue) = 0;
125125

126126
public:
127127

128128
//! Fonction interne temporaire pour récupérer le sous-domaine.
129-
virtual ISubDomain* internalSubDomain() const =0;
129+
virtual ISubDomain* internalSubDomain() const = 0;
130+
131+
//! Gestionnaire pour les accélérateurs
132+
virtual IAcceleratorMng* acceleratorMng() const = 0;
133+
134+
//! Positionne le gestionnaire des accélérateurs
135+
virtual void setAcceleratorMng(Ref<IAcceleratorMng> v) = 0;
130136
};
131137

132138
/*---------------------------------------------------------------------------*/

arcane/src/arcane/impl/SubDomain.cc

+3-2
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
// -*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
22
//-----------------------------------------------------------------------------
3-
// Copyright 2000-2023 CEA (www.cea.fr) IFPEN (www.ifpenergiesnouvelles.com)
3+
// Copyright 2000-2024 CEA (www.cea.fr) IFPEN (www.ifpenergiesnouvelles.com)
44
// See the top-level COPYRIGHT file for details.
55
// SPDX-License-Identifier: Apache-2.0
66
//-----------------------------------------------------------------------------
77
/*---------------------------------------------------------------------------*/
8-
/* SubDomain.cc (C) 2000-2023 */
8+
/* SubDomain.cc (C) 2000-2024 */
99
/* */
1010
/* Gestionnaire du sous-domaine. */
1111
/*---------------------------------------------------------------------------*/
@@ -489,6 +489,7 @@ initialize()
489489
m_parallel_mng->_internalApi()->setDefaultRunner(runner);
490490
m_all_replica_parallel_mng->_internalApi()->setDefaultRunner(runner);
491491
}
492+
m_variable_mng->_internalApi()->setAcceleratorMng(m_accelerator_mng);
492493
}
493494

494495
_printCPUAffinity();

arcane/src/arcane/impl/VariableMng.cc

+1-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
// SPDX-License-Identifier: Apache-2.0
66
//-----------------------------------------------------------------------------
77
/*---------------------------------------------------------------------------*/
8-
/* VariableMng.cc (C) 2000-2023 */
8+
/* VariableMng.cc (C) 2000-2024 */
99
/* */
1010
/* Classe gérant l'ensemble des variables. */
1111
/*---------------------------------------------------------------------------*/

arcane/src/arcane/impl/internal/VariableMng.h

+10-4
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
// SPDX-License-Identifier: Apache-2.0
66
//-----------------------------------------------------------------------------
77
/*---------------------------------------------------------------------------*/
8-
/* VariableMng.h (C) 2000-2023 */
8+
/* VariableMng.h (C) 2000-2024 */
99
/* */
1010
/* Classe gérant la liste des maillages. */
1111
/*---------------------------------------------------------------------------*/
@@ -18,13 +18,15 @@
1818
#include "arcane/utils/String.h"
1919
#include "arcane/utils/HashTableMap.h"
2020
#include "arcane/utils/List.h"
21+
#include "arcane/utils/Ref.h"
2122

2223
#include "arcane/core/IVariableMng.h"
2324
#include "arcane/core/IVariableFilter.h"
2425
#include "arcane/core/VariableCollection.h"
25-
2626
#include "arcane/core/internal/IVariableMngInternal.h"
2727

28+
#include "arcane/accelerator/core/IAcceleratorMng.h"
29+
2830
#include <map>
2931

3032
/*---------------------------------------------------------------------------*/
@@ -133,6 +135,8 @@ class VariableMng
133135
void removeVariable(IVariable* var) override { m_variable_mng->removeVariable(var); }
134136
void initializeVariables(bool is_continue) override { m_variable_mng->initializeVariables(is_continue); }
135137
ISubDomain* internalSubDomain() const override { return m_variable_mng->_internalSubDomain(); }
138+
IAcceleratorMng* acceleratorMng() const override { return m_variable_mng->m_accelerator_mng.get(); }
139+
void setAcceleratorMng(Ref<IAcceleratorMng> v) { m_variable_mng->m_accelerator_mng = v; }
136140

137141
private:
138142

@@ -256,6 +260,8 @@ class VariableMng
256260
VariableIOReaderMng* m_variable_io_reader_mng = nullptr;
257261
VariableSynchronizerMng* m_variable_synchronizer_mng = nullptr;
258262

263+
Ref<IAcceleratorMng> m_accelerator_mng;
264+
259265
private:
260266

261267
//! Ecrit la valeur de la variable \a v sur le flot \a o
@@ -295,8 +301,8 @@ class VariableIOWriterMng
295301

296302
void writeCheckpoint(ICheckpointWriter* service);
297303
void writePostProcessing(IPostProcessorWriter* post_processor);
298-
void writeVariables(IDataWriter* writer,const VariableCollection& vars, bool use_hash);
299-
void writeVariables(IDataWriter* writer,IVariableFilter* filter, bool use_hash);
304+
void writeVariables(IDataWriter* writer, const VariableCollection& vars, bool use_hash);
305+
void writeVariables(IDataWriter* writer, IVariableFilter* filter, bool use_hash);
300306

301307
private:
302308

arcane/src/arcane/materials/MeshMaterialMng.cc

+19-1
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,9 @@
3232
#include "arcane/core/materials/IMeshMaterialVariableFactoryMng.h"
3333
#include "arcane/core/materials/IMeshMaterialVariable.h"
3434
#include "arcane/core/materials/MeshMaterialVariableRef.h"
35+
#include "arcane/core/internal/IVariableMngInternal.h"
36+
37+
#include "arcane/accelerator/core/IAcceleratorMng.h"
3538

3639
#include "arcane/materials/MeshMaterialInfo.h"
3740
#include "arcane/materials/MeshEnvironmentBuildInfo.h"
@@ -167,6 +170,7 @@ MeshMaterialMng::
167170
void MeshMaterialMng::
168171
build()
169172
{
173+
// Enregistre les fabriques des variables
170174
{
171175
auto* x = MeshMaterialVariableFactoryRegisterer::firstRegisterer();
172176
while (x){
@@ -175,6 +179,20 @@ build()
175179
}
176180
}
177181

182+
// Positionne le runner par défaut
183+
{
184+
IAcceleratorMng* acc_mng = m_variable_mng->_internalApi()->acceleratorMng();
185+
if (acc_mng){
186+
Runner* default_runner = acc_mng->defaultRunner();
187+
if (default_runner)
188+
m_runner = *default_runner;
189+
}
190+
// Si pas de runner enregistré, utiliser un runner séquentiel.
191+
if (!m_runner.isInitialized())
192+
m_runner.initialize(Accelerator::eExecutionPolicy::Sequential);
193+
info() << "Use runner '" << m_runner.executionPolicy() << "' for MeshMaterialMng name=" << name();
194+
}
195+
178196
// Choix des optimisations.
179197
{
180198
int default_flags = 0;
@@ -224,7 +242,7 @@ build()
224242
String env_name = "ARCANE_MATERIAL_DATA_COMPRESSOR_NAME";
225243
String env_value = platform::getEnvironmentVariable(env_name);
226244
if (!env_value.null()){
227-
info() << "Use serivice '" << env_value << "' for material data compression";
245+
info() << "Use service '" << env_value << "' for material data compression";
228246
m_data_compressor_service_name = env_value;
229247
}
230248
}

arcane/src/arcane/materials/internal/MeshMaterialMng.h

+7
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,8 @@
2424
#include "arcane/core/materials/MatItemEnumerator.h"
2525
#include "arcane/core/materials/internal/IMeshMaterialMngInternal.h"
2626

27+
#include "arcane/accelerator/core/Runner.h"
28+
2729
#include "arcane/materials/MeshBlock.h"
2830
#include "arcane/materials/AllCellToAllEnvCellConverter.h"
2931
#include "arcane/materials/internal/MeshMaterial.h"
@@ -261,6 +263,10 @@ class MeshMaterialMng
261263

262264
IMeshMaterialMngInternal* _internalApi() const override { return m_internal_api.get(); }
263265

266+
public:
267+
268+
Runner runner() const { return m_runner; }
269+
264270
private:
265271

266272
AllCellToAllEnvCell* getAllCellToAllEnvCell() const { return m_allcell_2_allenvcell; }
@@ -328,6 +334,7 @@ class MeshMaterialMng
328334
AllCellToAllEnvCell* m_allcell_2_allenvcell = nullptr;
329335
bool m_is_allcell_2_allenvcell = false;
330336

337+
Runner m_runner;
331338

332339
private:
333340

0 commit comments

Comments
 (0)