1.1 --- a/src/simulator/simulator.cc Tue Aug 29 18:27:42 2006 +0200
1.2 +++ b/src/simulator/simulator.cc Sat Sep 02 12:09:07 2006 +0200
1.3 @@ -48,19 +48,6 @@
1.4
1.5 namespace ns3 {
1.6
1.7 -class ParallelSimulatorQueuePrivate {
1.8 -public:
1.9 - ParallelSimulatorQueuePrivate (SimulatorPrivate *priv);
1.10 - ~ParallelSimulatorQueuePrivate ();
1.11 - void set_queue (ParallelSimulatorQueue *queue);
1.12 - void schedule_abs_us (Event ev, uint64_t at);
1.13 - void send_null_message (void);
1.14 -private:
1.15 - void remove_event (Event ev);
1.16 - uint32_t m_n;
1.17 - SimulatorPrivate *m_simulator;
1.18 - ParallelSimulatorQueue *m_queue;
1.19 -};
1.20
1.21 class SimulatorPrivate {
1.22 public:
1.23 @@ -69,16 +56,9 @@
1.24
1.25 void enable_log_to (char const *filename);
1.26
1.27 - void add_queue (ParallelSimulatorQueuePrivate *queue);
1.28 - void notify_queue_not_empty (void);
1.29 - void notify_queue_empty (void);
1.30 - void wait_until_no_queue_empty (void);
1.31 - bool is_parallel (void);
1.32 -
1.33 bool is_finished (void) const;
1.34 uint64_t next_us (void) const;
1.35 void run_serial (void);
1.36 - void run_parallel (void);
1.37 void stop (void);
1.38 void stop_at_us (uint64_t at);
1.39 Event schedule_rel_us (Event event, uint64_t delta);
1.40 @@ -95,8 +75,6 @@
1.41 void process_one_event (void);
1.42
1.43 typedef std::list<std::pair<Event,uint32_t> > Events;
1.44 - typedef std::vector<ParallelSimulatorQueuePrivate *> Queues;
1.45 - typedef std::vector<ParallelSimulatorQueuePrivate *>::iterator QueuesI;
1.46 Events m_destroy;
1.47 uint64_t m_stop_at;
1.48 bool m_stop;
1.49 @@ -107,50 +85,9 @@
1.50 std::ofstream m_log;
1.51 std::ifstream m_input_log;
1.52 bool m_log_enable;
1.53 - uint32_t m_n_full_queues;
1.54 - uint32_t m_n_queues;
1.55 - SystemSemaphore *m_all_queues;
1.56 - Queues m_queues;
1.57 };
1.58
1.59
1.60 -ParallelSimulatorQueuePrivate::ParallelSimulatorQueuePrivate (SimulatorPrivate *simulator)
1.61 - : m_simulator (simulator)
1.62 -{}
1.63 -ParallelSimulatorQueuePrivate::~ParallelSimulatorQueuePrivate ()
1.64 -{}
1.65 -void
1.66 -ParallelSimulatorQueuePrivate::schedule_abs_us (Event ev, uint64_t at)
1.67 -{
1.68 - m_n++;
1.69 - if (m_n == 1) {
1.70 - m_simulator->notify_queue_not_empty ();
1.71 - }
1.72 - m_simulator->schedule_abs_us (make_event (&ParallelSimulatorQueuePrivate::remove_event, this, ev), at);
1.73 -}
1.74 -void
1.75 -ParallelSimulatorQueuePrivate::remove_event (Event ev)
1.76 -{
1.77 - m_n--;
1.78 - if (m_n == 0) {
1.79 - m_simulator->notify_queue_empty ();
1.80 - }
1.81 - ev ();
1.82 -}
1.83 -
1.84 -void
1.85 -ParallelSimulatorQueuePrivate::set_queue (ParallelSimulatorQueue *queue)
1.86 -{
1.87 - m_queue = queue;
1.88 -}
1.89 -
1.90 -void
1.91 -ParallelSimulatorQueuePrivate::send_null_message (void)
1.92 -{
1.93 - m_queue->send_null_message ();
1.94 -}
1.95 -
1.96 -
1.97
1.98
1.99 SimulatorPrivate::SimulatorPrivate (Scheduler *events)
1.100 @@ -161,9 +98,6 @@
1.101 m_uid = 0;
1.102 m_log_enable = false;
1.103 m_current_us = 0;
1.104 - m_all_queues = new SystemSemaphore (0);
1.105 - m_n_queues = 0;
1.106 - m_n_full_queues = 0;
1.107 }
1.108
1.109 SimulatorPrivate::~SimulatorPrivate ()
1.110 @@ -176,15 +110,8 @@
1.111 }
1.112 delete m_events;
1.113 m_events = (Scheduler *)0xdeadbeaf;
1.114 - delete m_all_queues;
1.115 - m_queues.erase (m_queues.begin (), m_queues.end ());
1.116 }
1.117
1.118 -bool
1.119 -SimulatorPrivate::is_parallel (void)
1.120 -{
1.121 - return (m_n_queues > 0);
1.122 -}
1.123
1.124 void
1.125 SimulatorPrivate::enable_log_to (char const *filename)
1.126 @@ -193,34 +120,6 @@
1.127 m_log_enable = true;
1.128 }
1.129
1.130 -void
1.131 -SimulatorPrivate::notify_queue_not_empty (void)
1.132 -{
1.133 - m_n_full_queues++;
1.134 - if (m_n_full_queues == m_n_queues) {
1.135 - m_all_queues->post ();
1.136 - }
1.137 -}
1.138 -void
1.139 -SimulatorPrivate::notify_queue_empty (void)
1.140 -{
1.141 - m_n_full_queues--;
1.142 -}
1.143 -void
1.144 -SimulatorPrivate::wait_until_no_queue_empty (void)
1.145 -{
1.146 - while (m_n_full_queues < m_n_queues) {
1.147 - m_all_queues->wait ();
1.148 - }
1.149 -}
1.150 -
1.151 -void
1.152 -SimulatorPrivate::add_queue (ParallelSimulatorQueuePrivate *queue)
1.153 -{
1.154 - m_n_queues++;
1.155 - m_queues.push_back (queue);
1.156 -}
1.157 -
1.158 void
1.159 SimulatorPrivate::process_one_event (void)
1.160 {
1.161 @@ -260,25 +159,6 @@
1.162 m_log.close ();
1.163 }
1.164
1.165 -void
1.166 -SimulatorPrivate::run_parallel (void)
1.167 -{
1.168 - TRACE ("run parallel");
1.169 - while (!m_stop &&
1.170 - (m_stop_at == 0 || m_stop_at >= next_us ())) {
1.171 - TRACE ("send null messages");
1.172 - for (QueuesI i = m_queues.begin (); i != m_queues.end (); i++) {
1.173 - (*i)->send_null_message ();
1.174 - }
1.175 - TRACE ("sent null messages");
1.176 - wait_until_no_queue_empty ();
1.177 - TRACE ("no queue empty");
1.178 - process_one_event();
1.179 - TRACE ("processed event");
1.180 - }
1.181 - m_log.close ();
1.182 - TRACE ("done run parallel");
1.183 -}
1.184
1.185 void
1.186 SimulatorPrivate::stop (void)
1.187 @@ -426,14 +306,6 @@
1.188 m_priv = 0;
1.189 }
1.190
1.191 -void
1.192 -Simulator::add_parallel_queue (ParallelSimulatorQueue *queue)
1.193 -{
1.194 - ParallelSimulatorQueuePrivate *priv = new ParallelSimulatorQueuePrivate (get_priv ());
1.195 - priv->set_queue (queue);
1.196 - queue->set_priv (priv);
1.197 - return get_priv ()->add_queue (priv);
1.198 -}
1.199
1.200 bool
1.201 Simulator::is_finished (void)
1.202 @@ -450,11 +322,7 @@
1.203 void
1.204 Simulator::run (void)
1.205 {
1.206 - if (get_priv ()->is_parallel ()) {
1.207 - get_priv ()->run_parallel ();
1.208 - } else {
1.209 - get_priv ()->run_serial ();
1.210 - }
1.211 + get_priv ()->run_serial ();
1.212 }
1.213 void
1.214 Simulator::stop (void)
1.215 @@ -525,20 +393,4 @@
1.216
1.217 namespace ns3 {
1.218
1.219 -ParallelSimulatorQueue::ParallelSimulatorQueue ()
1.220 -{}
1.221 -ParallelSimulatorQueue::~ParallelSimulatorQueue ()
1.222 -{
1.223 - delete m_priv;
1.224 -}
1.225 -void
1.226 -ParallelSimulatorQueue::schedule_abs_us (uint64_t at, Event ev)
1.227 -{
1.228 - m_priv->schedule_abs_us (ev, at);
1.229 -}
1.230 -void
1.231 -ParallelSimulatorQueue::set_priv (ParallelSimulatorQueuePrivate *priv)
1.232 -{
1.233 - m_priv = priv;
1.234 -}
1.235 };
2.1 --- a/src/simulator/simulator.h Tue Aug 29 18:27:42 2006 +0200
2.2 +++ b/src/simulator/simulator.h Sat Sep 02 12:09:07 2006 +0200
2.3 @@ -28,22 +28,6 @@
2.4 namespace ns3 {
2.5
2.6 class SimulatorPrivate;
2.7 -class ParallelSimulatorQueuePrivate;
2.8 -
2.9 -class ParallelSimulatorQueue {
2.10 -public:
2.11 - virtual ~ParallelSimulatorQueue () = 0;
2.12 - void schedule_abs_us (uint64_t at, Event ev);
2.13 -private:
2.14 - friend class Simulator;
2.15 - friend class ParallelSimulatorQueuePrivate;
2.16 -
2.17 - void set_priv (ParallelSimulatorQueuePrivate *priv);
2.18 - virtual void send_null_message (void) = 0;
2.19 - ParallelSimulatorQueuePrivate *m_priv;
2.20 -protected:
2.21 - ParallelSimulatorQueue ();
2.22 -};
2.23
2.24 /**
2.25 * \brief Control the scheduling of simulation events.
2.26 @@ -109,16 +93,6 @@
2.27 */
2.28 static void destroy (void);
2.29
2.30 - /**
2.31 - * Register a new source of events from a remote simulation engine.
2.32 - * This new source of events is used by the parallel scheduler
2.33 - * to synchronize with the remote simulation engine by sending and
2.34 - * receiving null messages. The synchronization algorithm used
2.35 - * here is the classic Chandy/Misra/Bryant null-message algorithm.
2.36 - * This method must be invoked bfore any call to Simulator::run.
2.37 - * @param queue the queue to add to the list of event sources.
2.38 - */
2.39 - static void add_parallel_queue (ParallelSimulatorQueue *queue);
2.40
2.41 /**
2.42 * If there any any events lefts to be scheduled, return