Arcane  v3.15.0.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-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/* ParallelLoopOptions.h (C) 2000-2024 */
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
19/*---------------------------------------------------------------------------*/
20/*---------------------------------------------------------------------------*/
21
22namespace Arcane
23{
24
25/*---------------------------------------------------------------------------*/
26/*---------------------------------------------------------------------------*/
34class ARCANE_UTILS_EXPORT ParallelLoopOptions
35{
36 private:
37
40 {
41 SF_MaxThread = 1,
42 SF_GrainSize = 2,
43 SF_Partitioner = 4
44 };
45
46 public:
47
49 enum class Partitioner
50 {
52 Auto = 0,
63 Static = 1,
74 Deterministic = 2
75 };
76
77 public:
78
80 : m_grain_size(0)
81 , m_max_thread(-1)
82 , m_partitioner(Partitioner::Auto)
83 , m_flags(0)
84 {}
85
86 public:
87
89 Int32 maxThread() const { return m_max_thread; }
97 void setMaxThread(Integer v)
98 {
99 m_max_thread = v;
100 m_flags |= SF_MaxThread;
101 }
103 bool hasMaxThread() const { return m_flags & SF_MaxThread; }
104
106 Integer grainSize() const { return m_grain_size; }
108 void setGrainSize(Integer v)
109 {
110 m_grain_size = v;
111 m_flags |= SF_GrainSize;
112 }
114 bool hasGrainSize() const { return m_flags & SF_GrainSize; }
115
117 Partitioner partitioner() const { return m_partitioner; }
120 {
121 m_partitioner = v;
122 m_flags |= SF_Partitioner;
123 }
125 bool hasPartitioner() const { return m_flags & SF_Partitioner; }
126
127 public:
128
131 {
132 if (!hasMaxThread())
133 setMaxThread(po.maxThread());
134 if (!hasGrainSize())
135 setGrainSize(po.grainSize());
136 if (!hasPartitioner())
137 setPartitioner(po.partitioner());
138 }
139
140 private:
141
143 Int32 m_grain_size = 0;
145 Int32 m_max_thread = -1;
147 Partitioner m_partitioner = Partitioner::Auto;
148
149 unsigned int m_flags = 0;
150};
151
152/*---------------------------------------------------------------------------*/
153/*---------------------------------------------------------------------------*/
154
155} // End namespace Arcane
156
157/*---------------------------------------------------------------------------*/
158/*---------------------------------------------------------------------------*/
159
160#endif
Déclarations des types utilisés dans Arcane.
Lecteur des fichiers de maillage via la bibliothèque LIMA.
Definition Lima.cc:149
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 -*-