Arcane  v3.14.10.0
Documentation utilisateur
Chargement...
Recherche...
Aucune correspondance
SequentialSection.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/* SequentialSection.h (C) 2000-2015 */
9/* */
10/* Section du code à exécuter séquentiellement. */
11/*---------------------------------------------------------------------------*/
12#ifndef ARCANE_SEQUENTIALSECTION_H
13#define ARCANE_SEQUENTIALSECTION_H
14/*---------------------------------------------------------------------------*/
15/*---------------------------------------------------------------------------*/
16
17
18#include "arcane/utils/ParallelFatalErrorException.h"
19
20/*---------------------------------------------------------------------------*/
21/*---------------------------------------------------------------------------*/
22
23ARCANE_BEGIN_NAMESPACE
24
25/*---------------------------------------------------------------------------*/
26/*---------------------------------------------------------------------------*/
27
28class IParallelMng;
29class ISubDomain;
30
31/*---------------------------------------------------------------------------*/
32/*---------------------------------------------------------------------------*/
33/*!
34 * \brief Section de code à exécuter séquentiellement.
35 *
36 * Une instance de cette classe permet à une partie du code de s'exécuter
37 * un peu comme si le code était séquentiel. Le code compris dans la durée
38 * de vie de cet objet est d'abord exécuté sur le proc 0, puis si tout est
39 * ok sur les autres. Cela permet lorsque le code exécuter est le même
40 * partout (par exemple la lecture du jeu de données) de le vérifier une
41 * fois et en cas d'erreur d'afficher une seule fois les messages.
42 *
43 * Comme les erreurs éventuelles ne sont affichées que par un seul
44 * sous-domaine, cette classe ne doit être utilisée que lorsqu'on est
45 * certain que tout les sous-domaines font le même traitement faute
46 * de quoi les erreurs ne seront pas reconnues.
47 *
48 * De plus, comme tous les sous-domaines bloquent tant que le premier
49 * sous-domaine n'a pas fini d'exécuter le code, il faut ne faut pas
50 * faire d'appel au gestionnaire de parallélisme dans cette partie.
51 *
52 * En cas d'erreur, une exception de type ExParallelFatalError est
53 * envoyée dans le destructeur.
54 *
55 \code
56 * {
57 * SequentialSection ss(pm);
58 * ... // Code exécuté séquentiellement.
59 * ss.setError(true);
60 * }
61 \endcode
62 *
63 */
64class ARCANE_CORE_EXPORT SequentialSection
65{
66 public:
67
70 ~SequentialSection() ARCANE_NOEXCEPT_FALSE;
71
72 public:
73
74 void setError(bool is_error);
75
76 private:
77
78 IParallelMng* m_parallel_mng;
79 bool m_has_error;
80
81 void _init();
82 void _sendError();
83};
84
85/*---------------------------------------------------------------------------*/
86/*---------------------------------------------------------------------------*/
87
88ARCANE_END_NAMESPACE
89
90/*---------------------------------------------------------------------------*/
91/*---------------------------------------------------------------------------*/
92
93#endif
94
Interface du gestionnaire de parallélisme pour un sous-domaine.
Interface du gestionnaire d'un sous-domaine.
Definition ISubDomain.h:74
Section de code à exécuter séquentiellement.