A Discrete-Event Network Simulator
API
distributed-simulator-impl.h
Go to the documentation of this file.
1 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
2 /*
3  * This program is free software; you can redistribute it and/or modify
4  * it under the terms of the GNU General Public License version 2 as
5  * published by the Free Software Foundation;
6  *
7  * This program is distributed in the hope that it will be useful,
8  * but WITHOUT ANY WARRANTY; without even the implied warranty of
9  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
10  * GNU General Public License for more details.
11  *
12  * You should have received a copy of the GNU General Public License
13  * along with this program; if not, write to the Free Software
14  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
15  *
16  * Author: George Riley <riley@ece.gatech.edu>
17  *
18  */
19 
26 #ifndef NS3_DISTRIBUTED_SIMULATOR_IMPL_H
27 #define NS3_DISTRIBUTED_SIMULATOR_IMPL_H
28 
29 #include "ns3/simulator-impl.h"
30 #include "ns3/scheduler.h"
31 #include "ns3/event-impl.h"
32 #include "ns3/ptr.h"
33 
34 #include <list>
35 
36 namespace ns3 {
37 
44 {
45 public:
47  : m_txCount (0),
48  m_rxCount (0),
49  m_myId (0),
50  m_isFinished (false)
51  {
52  }
53 
61  LbtsMessage (uint32_t rxc, uint32_t txc, uint32_t id, bool isFinished, const Time& t)
62  : m_txCount (txc),
63  m_rxCount (rxc),
64  m_myId (id),
65  m_smallestTime (t),
66  m_isFinished (isFinished)
67  {
68  }
69 
70  ~LbtsMessage ();
71 
79  uint32_t GetTxCount ();
83  uint32_t GetRxCount ();
87  uint32_t GetMyId ();
91  bool IsFinished ();
92 
93 private:
94  uint32_t m_txCount;
95  uint32_t m_rxCount;
96  uint32_t m_myId;
98  bool m_isFinished;
99 };
100 
108 {
109 public:
114  static TypeId GetTypeId (void);
115 
120 
121  // virtual from SimulatorImpl
122  virtual void Destroy ();
123  virtual bool IsFinished (void) const;
124  virtual void Stop (void);
125  virtual void Stop (Time const &delay);
126  virtual EventId Schedule (Time const &delay, EventImpl *event);
127  virtual void ScheduleWithContext (uint32_t context, Time const &delay, EventImpl *event);
128  virtual EventId ScheduleNow (EventImpl *event);
129  virtual EventId ScheduleDestroy (EventImpl *event);
130  virtual void Remove (const EventId &id);
131  virtual void Cancel (const EventId &id);
132  virtual bool IsExpired (const EventId &id) const;
133  virtual void Run (void);
134  virtual Time Now (void) const;
135  virtual Time GetDelayLeft (const EventId &id) const;
136  virtual Time GetMaximumSimulationTime (void) const;
137  virtual void SetScheduler (ObjectFactory schedulerFactory);
138  virtual uint32_t GetSystemId (void) const;
139  virtual uint32_t GetContext (void) const;
140  virtual uint64_t GetEventCount (void) const;
141 
155  virtual void BoundLookAhead (const Time lookAhead);
156 
157 private:
158  // Inherited from Object
159  virtual void DoDispose (void);
160 
169  void CalculateLookAhead (void);
176  bool IsLocalFinished (void) const;
177 
179  void ProcessOneEvent (void);
187  uint64_t NextTs (void) const;
193  Time Next (void) const;
194 
196  typedef std::list<EventId> DestroyEvents;
197 
201  bool m_stop;
206 
208  uint32_t m_uid;
210  uint32_t m_currentUid;
212  uint64_t m_currentTs;
216  uint64_t m_eventCount;
222 
228  uint32_t m_myId;
229  uint32_t m_systemCount;
231  static Time m_lookAhead;
233 };
234 
235 } // namespace ns3
236 
237 #endif /* NS3_DISTRIBUTED_SIMULATOR_IMPL_H */
Distributed simulator implementation using lookahead.
virtual void Cancel(const EventId &id)
Set the cancel bit on this event: the event's associated function will not be invoked when it expires...
DestroyEvents m_destroyEvents
The container of events to run at Destroy()
Time Next(void) const
Get the time of the next event, as returned by NextTs().
virtual EventId Schedule(Time const &delay, EventImpl *event)
Schedule a future event execution (in the same context).
Time m_grantedTime
End of current window.
virtual Time GetMaximumSimulationTime(void) const
Get the maximum representable simulation time.
uint32_t m_currentContext
Execution context of the current event.
LbtsMessage * m_pLBTS
Container for Lbts messages, one per rank.
uint64_t m_currentTs
Timestamp of the current event.
virtual void ScheduleWithContext(uint32_t context, Time const &delay, EventImpl *event)
Schedule a future event execution (in a different context).
virtual void Remove(const EventId &id)
Remove an event from the event list.
virtual bool IsFinished(void) const
Check if the simulation should finish.
void ProcessOneEvent(void)
Process the next event.
virtual void Run(void)
Run the simulation.
Ptr< Scheduler > m_events
The event priority queue.
virtual void Destroy()
Execute the events scheduled with ScheduleDestroy().
virtual Time GetDelayLeft(const EventId &id) const
Get the remaining time until this event will execute.
bool m_globalFinished
Are all parallel instances completed.
uint32_t m_uid
Next event unique id.
virtual uint64_t GetEventCount(void) const
Get the number of events executed.
virtual bool IsExpired(const EventId &id) const
Check if an event has already run or been cancelled.
void CalculateLookAhead(void)
Calculate lookahead constraint based on network latency.
std::list< EventId > DestroyEvents
Container type for the events to run at Simulator::Destroy().
virtual Time Now(void) const
Return the current simulation virtual time.
int m_unscheduledEvents
Number of events that have been inserted but not yet scheduled, not counting the "destroy" events; th...
virtual void DoDispose(void)
Destructor implementation.
virtual void SetScheduler(ObjectFactory schedulerFactory)
Set the Scheduler to be used to manage the event list.
virtual EventId ScheduleNow(EventImpl *event)
Schedule an event to run at the current virtual time.
bool IsLocalFinished(void) const
Check if this rank is finished.
uint32_t m_systemCount
MPI communicator size.
virtual void BoundLookAhead(const Time lookAhead)
Add additional bound to lookahead constraints.
virtual EventId ScheduleDestroy(EventImpl *event)
Schedule an event to run at the end of the simulation, after the Stop() time or condition has been re...
static TypeId GetTypeId(void)
Register this type.
virtual uint32_t GetContext(void) const
Get the current simulation context.
uint64_t NextTs(void) const
Get the timestep of the next event.
virtual uint32_t GetSystemId(void) const
Get the system id of this simulator.
bool m_stop
Flag calling for the end of the simulation.
static Time m_lookAhead
Current window size.
uint32_t m_currentUid
Unique id of the current event.
virtual void Stop(void)
Tell the Simulator the calling event should be the last one executed.
An identifier for simulation events.
Definition: event-id.h:54
A simulation event.
Definition: event-impl.h:45
Structure used for all-reduce LBTS computation.
uint32_t m_txCount
Count of transmitted messages.
uint32_t m_rxCount
Count of received messages.
uint32_t m_myId
System Id of the rank sending this LBTS.
Time m_smallestTime
Earliest next event timestamp.
bool m_isFinished
true when this rank has no more events.
LbtsMessage(uint32_t rxc, uint32_t txc, uint32_t id, bool isFinished, const Time &t)
Instantiate subclasses of ns3::Object.
Smart pointer class similar to boost::intrusive_ptr.
Definition: ptr.h:74
The SimulatorImpl base class.
Simulation virtual time values and global simulation resolution.
Definition: nstime.h:103
a unique identifier for an interface.
Definition: type-id.h:59
Every class exported by the ns3 library is enclosed in the ns3 namespace.