remove parallel queues
authorMathieu Lacage <mathieu.lacage@sophia.inria.fr>
Sat Sep 02 12:09:07 2006 +0200 (2006-09-02)
changeset 2019c395336b0d
parent 19 bc4690ec2cbb
child 21 a8f0cda66189
remove parallel queues
src/simulator/simulator.cc
src/simulator/simulator.h
     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