mem-garnet: Use static allocation in CrossbarSwitch

There is no need to dynamically allocate these variables.

Change-Id: I6efeaffe75f2b4ba706c26d2a12c42c07dc7c7ee
Signed-off-by: Daniel R. Carvalho <odanrc@yahoo.com.br>
Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/24983
Reviewed-by: Srikant Bharadwaj <srikant.bharadwaj@amd.com>
Maintainer: Nikos Nikoleris <nikos.nikoleris@arm.com>
Tested-by: kokoro <noreply+kokoro@google.com>
This commit is contained in:
Daniel R. Carvalho
2020-01-26 12:38:54 +01:00
committed by Daniel Carvalho
parent f5f523ed26
commit 7539c69c4e
2 changed files with 18 additions and 23 deletions

View File

@@ -36,21 +36,15 @@
#include "mem/ruby/network/garnet2.0/Router.hh"
CrossbarSwitch::CrossbarSwitch(Router *router)
: Consumer(router)
: Consumer(router), m_router(router), m_num_vcs(m_router->get_num_vcs()),
m_crossbar_activity(0), switchBuffers(0)
{
m_router = router;
m_num_vcs = m_router->get_num_vcs();
m_crossbar_activity = 0;
}
void
CrossbarSwitch::init()
{
m_num_inports = m_router->get_num_inports();
m_switch_buffer.resize(m_num_inports);
for (int i = 0; i < m_num_inports; i++) {
m_switch_buffer[i].reset(new flitBuffer());
}
switchBuffers.resize(m_router->get_num_inports());
}
/*
@@ -66,11 +60,12 @@ CrossbarSwitch::wakeup()
"at time: %lld\n",
m_router->get_id(), m_router->curCycle());
for (int inport = 0; inport < m_num_inports; inport++) {
if (!m_switch_buffer[inport]->isReady(m_router->curCycle()))
for (auto& switch_buffer : switchBuffers) {
if (!switch_buffer.isReady(m_router->curCycle())) {
continue;
}
flit *t_flit = m_switch_buffer[inport]->peekTopFlit();
flit *t_flit = switch_buffer.peekTopFlit();
if (t_flit->is_stage(ST_, m_router->curCycle())) {
int outport = t_flit->get_outport();
@@ -81,7 +76,7 @@ CrossbarSwitch::wakeup()
// This will take care of waking up the Network Link
// in the next cycle
m_router->getOutputUnit(outport)->insert_flit(t_flit);
m_switch_buffer[inport]->getTopFlit();
switch_buffer.getTopFlit();
m_crossbar_activity++;
}
}
@@ -92,8 +87,8 @@ CrossbarSwitch::functionalWrite(Packet *pkt)
{
uint32_t num_functional_writes = 0;
for (uint32_t i = 0; i < m_switch_buffer.size(); ++i) {
num_functional_writes += m_switch_buffer[i]->functionalWrite(pkt);
for (auto& switch_buffer : switchBuffers) {
num_functional_writes += switch_buffer.functionalWrite(pkt);
}
return num_functional_writes;

View File

@@ -33,7 +33,6 @@
#define __MEM_RUBY_NETWORK_GARNET2_0_CROSSBARSWITCH_HH__
#include <iostream>
#include <memory>
#include <vector>
#include "mem/ruby/common/Consumer.hh"
@@ -41,7 +40,6 @@
#include "mem/ruby/network/garnet2.0/flitBuffer.hh"
class Router;
class OutputUnit;
class CrossbarSwitch : public Consumer
{
@@ -52,8 +50,11 @@ class CrossbarSwitch : public Consumer
void init();
void print(std::ostream& out) const {};
inline void update_sw_winner(int inport, flit *t_flit)
{ m_switch_buffer[inport]->insert(t_flit); }
inline void
update_sw_winner(int inport, flit *t_flit)
{
switchBuffers[inport].insert(t_flit);
}
inline double get_crossbar_activity() { return m_crossbar_activity; }
@@ -61,11 +62,10 @@ class CrossbarSwitch : public Consumer
void resetStats();
private:
int m_num_vcs;
int m_num_inports;
double m_crossbar_activity;
Router *m_router;
std::vector<std::unique_ptr<flitBuffer>> m_switch_buffer;
int m_num_vcs;
double m_crossbar_activity;
std::vector<flitBuffer> switchBuffers;
};
#endif // __MEM_RUBY_NETWORK_GARNET2_0_CROSSBARSWITCH_HH__