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.
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 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);
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);
* \param type The type of communication we are looking for (comm_send, comm_recv)
* \return The communication synchro if found, nullptr otherwise
*/
* \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;
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;
#ifndef _SIMIX_NETWORK_PRIVATE_H
#define _SIMIX_NETWORK_PRIVATE_H
#ifndef _SIMIX_NETWORK_PRIVATE_H
#define _SIMIX_NETWORK_PRIVATE_H
#include <string>
#include <boost/intrusive_ptr.hpp>
#include <string>
#include <boost/intrusive_ptr.hpp>
+#include <boost/circular_buffer.hpp>
- 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;
~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
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