Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Merge branch 'master' of https://framagit.org/simgrid/simgrid
[simgrid.git] / src / smpi / include / smpi_actor.hpp
1 /* Copyright (c) 2009-2019. The SimGrid Team. All rights reserved.          */
2
3 /* This program is free software; you can redistribute it and/or modify it
4  * under the terms of the license (GNU LGPL) which comes with this package. */
5
6 #ifndef SMPI_ACTOR_HPP
7 #define SMPI_ACTOR_HPP
8
9 #include "private.hpp"
10 #include "simgrid/s4u/Mailbox.hpp"
11 #include "src/instr/instr_smpi.hpp"
12 #include "xbt/synchro.h"
13
14 namespace simgrid {
15 namespace smpi {
16
17 class ActorExt {
18 private:
19   double simulated_ = 0 /* Used to time with simulated_start/elapsed */;
20   s4u::MailboxPtr mailbox_;
21   s4u::MailboxPtr mailbox_small_;
22   s4u::MutexPtr mailboxes_mutex_;
23   xbt_os_timer_t timer_;
24   MPI_Comm comm_self_   = MPI_COMM_NULL;
25   MPI_Comm comm_intra_  = MPI_COMM_NULL;
26   MPI_Comm* comm_world_ = nullptr;
27   SmpiProcessState state_;
28   int sampling_ = 0; /* inside an SMPI_SAMPLE_ block? */
29   std::string instance_id_;
30   bool replaying_ = false; /* is the process replaying a trace */
31   s4u::Barrier* finalization_barrier_;
32   smpi_trace_call_location_t trace_call_loc_;
33   s4u::ActorPtr actor_                           = nullptr;
34   smpi_privatization_region_t privatized_region_ = nullptr;
35   int optind                                     = 0; /*for getopt replacement */
36   std::string tracing_category_                  = "";
37
38 #if HAVE_PAPI
39   /** Contains hardware data as read by PAPI **/
40   int papi_event_set_;
41   papi_counter_t papi_counter_data_;
42 #endif
43 public:
44   explicit ActorExt(simgrid::s4u::ActorPtr actor, simgrid::s4u::Barrier* barrier);
45   ActorExt(const ActorExt&) = delete;
46   ActorExt& operator=(const ActorExt&) = delete;
47   ~ActorExt();
48   void set_data(const char* instance_id);
49   void finalize();
50   int finalized();
51   int initializing();
52   int initialized();
53   void mark_as_initialized();
54   void set_replaying(bool value);
55   bool replaying();
56   void set_tracing_category(const std::string& category) { tracing_category_ = category; }
57   const std::string& get_tracing_category() { return tracing_category_; }
58   smpi_trace_call_location_t* call_location();
59   void set_privatized_region(smpi_privatization_region_t region);
60   smpi_privatization_region_t privatized_region();
61   s4u::MailboxPtr mailbox() { return mailbox_; }
62   s4u::MailboxPtr mailbox_small() { return mailbox_small_; }
63   s4u::MutexPtr mailboxes_mutex();
64 #if HAVE_PAPI
65   int papi_event_set();
66   papi_counter_t& papi_counters();
67 #endif
68   xbt_os_timer_t timer();
69   void simulated_start();
70   double simulated_elapsed();
71   MPI_Comm comm_world();
72   MPI_Comm comm_self();
73   MPI_Comm comm_intra();
74   void set_comm_intra(MPI_Comm comm);
75   void set_sampling(int s);
76   int sampling();
77   static void init();
78   simgrid::s4u::ActorPtr get_actor();
79   int get_optind();
80   void set_optind(int optind);
81 };
82
83 } // namespace smpi
84 } // namespace simgrid
85
86 #endif