From c1cf55c7388d01222825911fabca617177966ce9 Mon Sep 17 00:00:00 2001 From: Joel Hestness Date: Wed, 11 Sep 2013 15:33:27 -0500 Subject: [PATCH] ruby: Statically allocate stats in SimpleNetwork, Switch, Throttle The previous changeset (9863:9483739f83ee) used STL vector containers to dynamically allocate stats in the Ruby SimpleNetwork, Switch and Throttle. For gcc versions before at least 4.6.3, this causes the standard vector allocator to call Stats copy constructors (a no-no, since stats should be allocated in the body of each SimObject instance). Since the size of these stats arrays is known at compile time (NOTE: after code generation), this patch changes their allocation to be static rather than using an STL vector. --- src/mem/ruby/network/simple/SimpleNetwork.cc | 3 --- src/mem/ruby/network/simple/SimpleNetwork.hh | 4 ++-- src/mem/ruby/network/simple/Switch.cc | 3 --- src/mem/ruby/network/simple/Switch.hh | 5 +++-- src/mem/ruby/network/simple/Throttle.cc | 3 --- src/mem/ruby/network/simple/Throttle.hh | 4 ++-- 6 files changed, 7 insertions(+), 15 deletions(-) diff --git a/src/mem/ruby/network/simple/SimpleNetwork.cc b/src/mem/ruby/network/simple/SimpleNetwork.cc index 41f587d473..a3848a8e32 100644 --- a/src/mem/ruby/network/simple/SimpleNetwork.cc +++ b/src/mem/ruby/network/simple/SimpleNetwork.cc @@ -208,9 +208,6 @@ SimpleNetwork::getThrottles(NodeID id) const void SimpleNetwork::regStats() { - m_msg_counts.resize(MessageSizeType_NUM); - m_msg_bytes.resize(MessageSizeType_NUM); - for (MessageSizeType type = MessageSizeType_FIRST; type < MessageSizeType_NUM; ++type) { m_msg_counts[(unsigned int) type] diff --git a/src/mem/ruby/network/simple/SimpleNetwork.hh b/src/mem/ruby/network/simple/SimpleNetwork.hh index 06db20c0b7..69aeeffb70 100644 --- a/src/mem/ruby/network/simple/SimpleNetwork.hh +++ b/src/mem/ruby/network/simple/SimpleNetwork.hh @@ -111,8 +111,8 @@ class SimpleNetwork : public Network bool m_adaptive_routing; //Statistical variables - std::vector m_msg_counts; - std::vector m_msg_bytes; + Stats::Formula m_msg_counts[MessageSizeType_NUM]; + Stats::Formula m_msg_bytes[MessageSizeType_NUM]; }; inline std::ostream& diff --git a/src/mem/ruby/network/simple/Switch.cc b/src/mem/ruby/network/simple/Switch.cc index c28bbdd86c..d5c32016e7 100644 --- a/src/mem/ruby/network/simple/Switch.cc +++ b/src/mem/ruby/network/simple/Switch.cc @@ -30,7 +30,6 @@ #include "base/cast.hh" #include "base/stl_helpers.hh" -#include "mem/protocol/MessageSizeType.hh" #include "mem/ruby/buffers/MessageBuffer.hh" #include "mem/ruby/network/simple/PerfectSwitch.hh" #include "mem/ruby/network/simple/SimpleNetwork.hh" @@ -44,8 +43,6 @@ using m5::stl_helpers::operator<<; Switch::Switch(const Params *p) : BasicRouter(p) { m_perfect_switch = new PerfectSwitch(m_id, this, p->virt_nets); - m_msg_counts.resize(MessageSizeType_NUM); - m_msg_bytes.resize(MessageSizeType_NUM); } Switch::~Switch() diff --git a/src/mem/ruby/network/simple/Switch.hh b/src/mem/ruby/network/simple/Switch.hh index 47f4c08588..85f1b6d6f1 100644 --- a/src/mem/ruby/network/simple/Switch.hh +++ b/src/mem/ruby/network/simple/Switch.hh @@ -43,6 +43,7 @@ #include #include "mem/packet.hh" +#include "mem/protocol/MessageSizeType.hh" #include "mem/ruby/common/TypeDefines.hh" #include "mem/ruby/network/BasicRouter.hh" #include "params/Switch.hh" @@ -92,8 +93,8 @@ class Switch : public BasicRouter // Statistical variables Stats::Formula m_avg_utilization; - std::vector m_msg_counts; - std::vector m_msg_bytes; + Stats::Formula m_msg_counts[MessageSizeType_NUM]; + Stats::Formula m_msg_bytes[MessageSizeType_NUM]; }; inline std::ostream& diff --git a/src/mem/ruby/network/simple/Throttle.cc b/src/mem/ruby/network/simple/Throttle.cc index 4a5616153a..88b46e2528 100644 --- a/src/mem/ruby/network/simple/Throttle.cc +++ b/src/mem/ruby/network/simple/Throttle.cc @@ -80,9 +80,6 @@ Throttle::init(NodeID node, Cycles link_latency, m_wakeups_wo_switch = 0; - m_msg_counts.resize(MessageSizeType_NUM); - m_msg_bytes.resize(MessageSizeType_NUM); - m_link_utilization_proxy = 0; } diff --git a/src/mem/ruby/network/simple/Throttle.hh b/src/mem/ruby/network/simple/Throttle.hh index b21af4d646..cdc627bb79 100644 --- a/src/mem/ruby/network/simple/Throttle.hh +++ b/src/mem/ruby/network/simple/Throttle.hh @@ -104,8 +104,8 @@ class Throttle : public Consumer // Statistical variables Stats::Scalar m_link_utilization; - std::vector m_msg_counts; - std::vector m_msg_bytes; + Stats::Vector m_msg_counts[MessageSizeType_NUM]; + Stats::Formula m_msg_bytes[MessageSizeType_NUM]; double m_link_utilization_proxy; };