Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Replace deque by boost:circular_buffer_space_optimized for memory reasons.
authordegomme <augustin.degomme@unibas.ch>
Thu, 17 Nov 2016 05:05:48 +0000 (22:05 -0700)
committerdegomme <augustin.degomme@unibas.ch>
Thu, 17 Nov 2016 05:05:48 +0000 (22:05 -0700)
Deques are pre-allocated to a specific size and use ~1KB of memory, even when empty.
As we need 2 deques per mailbox, this was quite a lot in the end.

src/simix/smx_network.cpp
src/simix/smx_network_private.h

index fcf65a3..3999fe7 100644 (file)
@@ -30,7 +30,7 @@ static xbt_dict_t mailboxes = xbt_dict_new_homogeneous(SIMIX_mbox_free);
 static void SIMIX_waitany_remove_simcall_from_actions(smx_simcall_t simcall);
 static void SIMIX_comm_copy_data(smx_activity_t comm);
 static inline void SIMIX_mbox_push(smx_mailbox_t mbox, smx_activity_t comm);
-static smx_activity_t _find_matching_comm(std::deque<smx_activity_t> *deque, e_smx_comm_type_t type,
+static smx_activity_t _find_matching_comm(boost::circular_buffer_space_optimized<smx_activity_t> *deque, e_smx_comm_type_t type,
     int (*match_fun)(void *, void *,smx_activity_t), void *user_data, smx_activity_t my_synchro, bool remove_matching);
 static void SIMIX_comm_start(smx_activity_t synchro);
 
@@ -113,7 +113,7 @@ void SIMIX_mbox_remove(smx_mailbox_t mbox, smx_activity_t synchro)
  *  \param type The type of communication we are looking for (comm_send, comm_recv)
  *  \return The communication synchro if found, nullptr otherwise
  */
-static smx_activity_t _find_matching_comm(std::deque<smx_activity_t> *deque, e_smx_comm_type_t type,
+static smx_activity_t _find_matching_comm(boost::circular_buffer_space_optimized<smx_activity_t> *deque, e_smx_comm_type_t type,
     int (*match_fun)(void *, void *,smx_activity_t), void *this_user_data, smx_activity_t my_synchro, bool remove_matching)
 {
   void* other_user_data = nullptr;
index 9c15594..cf56518 100644 (file)
@@ -7,10 +7,10 @@
 #ifndef _SIMIX_NETWORK_PRIVATE_H
 #define _SIMIX_NETWORK_PRIVATE_H
 
-#include <deque>
 #include <string>
 
 #include <boost/intrusive_ptr.hpp>
+#include <boost/circular_buffer.hpp>
 
 #include <xbt/base.h>
 
@@ -27,16 +27,16 @@ namespace simix {
 
 class Mailbox {
 public:
-  Mailbox(const char* name) : piface_(this), name(xbt_strdup(name)) {}
+  Mailbox(const char* name) : piface_(this), name(xbt_strdup(name)), comm_queue(1000), done_comm_queue(1000) {}
   ~Mailbox() {
     xbt_free(name);
   }
 
   simgrid::s4u::Mailbox piface_; // Our interface
   char* name;
-  std::deque<smx_activity_t> comm_queue;
+  boost::circular_buffer_space_optimized<smx_activity_t> comm_queue;
   boost::intrusive_ptr<simgrid::simix::ActorImpl> permanent_receiver; //process which the mailbox is attached to
-  std::deque<smx_activity_t> done_comm_queue;//messages already received in the permanent receive mode
+  boost::circular_buffer_space_optimized<smx_activity_t> done_comm_queue;//messages already received in the permanent receive mode
 };
 
 }