Arcane  v3.14.10.0
Documentation développeur
Chargement...
Recherche...
Aucune correspondance
ParallelLoopOptions.h
1// -*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
2//-----------------------------------------------------------------------------
3// Copyright 2000-2022 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/* ParallelLoopOptions.h (C) 2000-2022 */
9/* */
10/* Options de configuration pour les boucles parallèles en multi-thread. */
11/*---------------------------------------------------------------------------*/
12#ifndef ARCANE_UTILS_PARALLELLOOPOPTIONS_H
13#define ARCANE_UTILS_PARALLELLOOPOPTIONS_H
14/*---------------------------------------------------------------------------*/
15/*---------------------------------------------------------------------------*/
16
18#include "arcane/utils/PropertyDeclarations.h"
19
20/*---------------------------------------------------------------------------*/
21/*---------------------------------------------------------------------------*/
22
23namespace Arcane
24{
25
26/*---------------------------------------------------------------------------*/
27/*---------------------------------------------------------------------------*/
35class ARCANE_UTILS_EXPORT ParallelLoopOptions
36{
37 ARCANE_DECLARE_PROPERTY_CLASS(ParallelLoopOptions);
38
39 private:
40
43 {
44 SF_MaxThread = 1,
45 SF_GrainSize = 2,
46 SF_Partitioner = 4
47 };
48
49 public:
50
52 enum class Partitioner
53 {
55 Auto = 0,
66 Static = 1,
77 Deterministic = 2
78 };
79
80 public:
81
83 : m_grain_size(0)
84 , m_max_thread(-1)
85 , m_partitioner(Partitioner::Auto)
86 , m_flags(0)
87 {}
88
89 public:
90
92 Int32 maxThread() const { return m_max_thread; }
100 void setMaxThread(Integer v)
101 {
102 m_max_thread = v;
103 m_flags |= SF_MaxThread;
104 }
106 bool hasMaxThread() const { return m_flags & SF_MaxThread; }
107
109 Integer grainSize() const { return m_grain_size; }
111 void setGrainSize(Integer v)
112 {
113 m_grain_size = v;
114 m_flags |= SF_GrainSize;
115 }
117 bool hasGrainSize() const { return m_flags & SF_GrainSize; }
118
120 Partitioner partitioner() const { return m_partitioner; }
123 {
124 m_partitioner = v;
125 m_flags |= SF_Partitioner;
126 }
128 bool hasPartitioner() const { return m_flags & SF_Partitioner; }
129
130 public:
131
134 {
135 if (!hasMaxThread())
136 setMaxThread(po.maxThread());
137 if (!hasGrainSize())
138 setGrainSize(po.grainSize());
139 if (!hasPartitioner())
140 setPartitioner(po.partitioner());
141 }
142
143 private:
144
146 Int32 m_grain_size = 0;
148 Int32 m_max_thread = -1;
150 Partitioner m_partitioner = Partitioner::Auto;
151
152 unsigned int m_flags = 0;
153};
154
155/*---------------------------------------------------------------------------*/
156/*---------------------------------------------------------------------------*/
157
158} // End namespace Arcane
159
160/*---------------------------------------------------------------------------*/
161/*---------------------------------------------------------------------------*/
162
163#endif
Déclarations des types utilisés dans Arcane.
Lecteur des fichiers de maillage via la bibliothèque LIMA.
Definition Lima.cc:120
Options d'exécution d'une boucle parallèle en multi-thread.
bool hasPartitioner() const
Indique si grainSize() est positionné
Integer grainSize() const
Taille d'un intervalle d'itération.
Partitioner partitioner() const
Type du partitionneur.
void setPartitioner(Partitioner v)
Positionne le type du partitionneur.
bool hasGrainSize() const
Indique si grainSize() est positionné
void mergeUnsetValues(const ParallelLoopOptions &po)
Fusionne les valeurs non modifiées de l'instance par celles de po.
Int32 maxThread() const
Nombre maximal de threads autorisés.
bool hasMaxThread() const
Indique si maxThread() est positionné
void setGrainSize(Integer v)
Positionne la taille (approximative) d'un intervalle d'itération.
void setMaxThread(Integer v)
Positionne le nombre maximal de threads autorisé.
Partitioner
Type du partitionneur.
SetFlags
Drapeau pour indiquer quels champs ont été positionnés.
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-