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