Arcane  v3.14.10.0
Documentation développeur
Chargement...
Recherche...
Aucune correspondance
Otf2LibWrapper.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/* Otf2LibWrapper.h (C) 2000-2018 */
9/* */
10/* Classe qui encapsule les fonctions utiles de la lib Otf2. */
11/*---------------------------------------------------------------------------*/
12#ifndef ARCANE_STD_OTF2LIBWRAPPER_H
13#define ARCANE_STD_OTF2LIBWRAPPER_H
14/*---------------------------------------------------------------------------*/
15/*---------------------------------------------------------------------------*/
16
17#include <vector>
18#include <set>
19#include "arcane/ISubDomain.h"
21#include "arcane/utils/String.h"
22#include "otf2/otf2.h"
23
24/*---------------------------------------------------------------------------*/
25/*---------------------------------------------------------------------------*/
26
27namespace Arcane {
28
29/*---------------------------------------------------------------------------*/
30/*---------------------------------------------------------------------------*/
36{
37 public:
40
41 void init(const String& archive_name);
42 void finalize();
43
48 int getMpiRank() const;
49 int getMpiNbRank() const;
50
51 static OTF2_TimeStamp getTime();
52
53 private:
54 void _createOtf2Ids();
60
61 static OTF2_FlushType _preFlush(void* user_data,OTF2_FileType file_type, OTF2_LocationRef location, void* caller_data, bool final);
63
64 public:
65 // Une structure simple pour associer un nom de point d'entree avec un identifiant
66 struct EntryPointId {
67 EntryPointId(String name, Integer id) : m_name(name), m_id(id) {}
68 String m_name;
69 Integer m_id;
70 // Foncteur pour pouvoir faire un "heterogeneous lookup" sur le nom pour l'id
72 using is_transparent = void;
73 bool operator()(const EntryPointId& lhs, const EntryPointId& rhs) const
74 {
75 return lhs.m_name < rhs.m_name;
76 }
77 bool operator()(const String& name, const EntryPointId& ep_id) const
78 {
79 return name < ep_id.m_name;
80 }
81 bool operator()(const EntryPointId& ep_id, const String& name) const
82 {
83 return ep_id.m_name < name;
84 }
85 };
86 };
87
88 private:
89 // Structure interne pour la gestion des indices et decalages...
90 struct InternalIds {
91 uint32_t m_desc_offset; // decalage des description pour les noms des op MPI
92 uint32_t m_empty_id; // id pour la string vide
93 uint32_t m_thread_id; // id pour le nom du thread CPU mappe sur le process MPI
94 uint32_t m_hostname_id; // id pour le nom de la machine
95 uint32_t m_class_id; // id pour la classe de la machine
96 uint32_t m_comm_world_id; // id pour le MPI_COMM_WOLRD
97 uint32_t m_mpi_id; // id pour la string MPI
98 uint32_t m_comm_id; // id pour la string du paradigm MPI
99 uint32_t m_win_id; // id pour la string du paradigm MPI
100 uint32_t m_comm_self_id; // id pour la string du comme self
101 uint32_t m_ep_id; // id pour la string Entry Point
102 uint32_t m_sync_id; // id pour la string Synchronize
103 uint32_t m_app_name; // id pour le nom de l'application
104 uint32_t m_rank_offset; // decalage pour les ranks MPI
105 std::set<EntryPointId, EntryPointId::EntryPointIdCompare> m_ep_id_set;
106 // Ensemble des noms des points d'entree et leur id
107 };
108
109 ISubDomain* m_sub_domain = nullptr;
110 OTF2_Archive* m_archive = nullptr;
111 OTF2_FlushCallbacks m_flush_callbacks;
112 OTF2_EvtWriter* m_evt_writer = nullptr;
113 uint64_t m_evt_nb = 0;
114 OTF2_GlobalDefWriter* m_global_def_writer = nullptr;
116 InternalIds m_id;
117 std::vector<uint64_t> m_comm_members;
118};
119
120/*---------------------------------------------------------------------------*/
121/*---------------------------------------------------------------------------*/
122
123} // namespace Arcane
124
125/*---------------------------------------------------------------------------*/
126/*---------------------------------------------------------------------------*/
127
128#endif
Déclarations des types de la composante 'base' de Arccore.
Interface du gestionnaire d'un sous-domaine.
Definition ISubDomain.h:74
Lecteur des fichiers de maillage via la bibliothèque LIMA.
Definition Lima.cc:120
Classe d'encapsulation des fonctions de la librairie OTF2.
~Otf2LibWrapper()
Destructeur.
void _buildOtf2ClockAndStringDefinition(uint64_t global_start_time, uint64_t global_end_time)
static uint64_t s_epoch_start
Static member.
void init(const String &archive_name)
Methode d'initialisation. Permet de definir le chemin ou va se trouver l'archive ainsi que son nom.
void _buildOtf2ParadigmAndSystemDefinition()
uint32_t getApplicationNameId() const
Helper sur le nom de l'application.
OTF2_EvtWriter * getEventWriter()
int getMpiNbRank() const
Helper sur le nombre de rank MPI.
void _buildOtf2LocationDefinition()
Methode interne pour ecrire la definition du systeme associee a l'archive otf2.
static OTF2_TimeStamp getTime()
Méthode interne statique pour recuperer le timestamp.
void finalize()
Methode a appeler pour finaliser la creation de l'archive (i.e. on ne veut plus enregistrer plus d'ev...
static OTF2_TimeStamp _postFlush(void *user_data, OTF2_FileType file_type, OTF2_LocationRef location)
Méthode interne statique pour positionner la callback a appeler apres l'evenement a enregistrer.
static OTF2_FlushType _preFlush(void *user_data, OTF2_FileType file_type, OTF2_LocationRef location, void *caller_data, bool final)
Méthode interne statique pour positionner la callback a appeler avant l'evenement a enregistrer.
int getMpiRank() const
Helper sur le numero de rank MPI.
uint32_t getEntryPointId(const String &ep_name) const
Helper pour l'id d'un point d'entree via son nom.
uint32_t getSynchronizeId() const
Helper sur la chaine de charactere "syncrhonize".
Chaîne de caractères unicode.
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-