Srikant Bharadwaj has uploaded this change for review. (
https://gem5-review.googlesource.com/c/public/gem5/+/58529 )
Change subject: mem-garnet: Update legacy stats for Garnet
......................................................................
mem-garnet: Update legacy stats for Garnet
Update stats namespace to avoid warnings for Garnet.
Change-Id: I5c575e2c6623cd1ffcb96c1d13a4d2767f7511b6
---
M src/mem/ruby/network/garnet/GarnetNetwork.cc
M src/mem/ruby/network/garnet/GarnetNetwork.hh
2 files changed, 199 insertions(+), 166 deletions(-)
diff --git a/src/mem/ruby/network/garnet/GarnetNetwork.cc
b/src/mem/ruby/network/garnet/GarnetNetwork.cc
index de566a5..32284a7 100644
--- a/src/mem/ruby/network/garnet/GarnetNetwork.cc
+++ b/src/mem/ruby/network/garnet/GarnetNetwork.cc
@@ -63,10 +63,10 @@
GarnetNetwork::GarnetNetwork(const Params &p)
: Network(p)
+ garnetStats(this, m_virtual_networks, p.routers)
{
m_num_rows = p.num_rows;
m_ni_flit_size = p.ni_flit_size;
- m_max_vcs_per_vnet = 0;
m_buffers_per_data_vc = p.buffers_per_data_vc;
m_buffers_per_ctrl_vc = p.buffers_per_ctrl_vc;
m_routing_algorithm = p.routing_algorithm;
@@ -92,6 +92,8 @@
// initialize the router's network pointers
router->init_net_ptr(this);
+ m_max_vcs_per_vnet = std::max(m_max_vcs_per_vnet,
+ (uint32_t) router->get_vc_per_vnet());
}
// record the network interfaces
@@ -177,8 +179,12 @@
PortDirection dst_inport_dirn = "Local";
+<<<<<<< HEAD
m_max_vcs_per_vnet = std::max(m_max_vcs_per_vnet,
m_routers[dest]->get_vc_per_vnet());
+=======
+ assert((uint32_t)m_routers[dest]->get_vc_per_vnet() <=
m_max_vcs_per_vnet);
+>>>>>>> 60728161b6 (mem-garnet: Update stats for Garnet)
/*
* We check if a bridge was enabled at any end of the link.
@@ -246,8 +252,12 @@
PortDirection src_outport_dirn = "Local";
+<<<<<<< HEAD
m_max_vcs_per_vnet = std::max(m_max_vcs_per_vnet,
m_routers[src]->get_vc_per_vnet());
+=======
+ assert((uint32_t)m_routers[src]->get_vc_per_vnet() <=
m_max_vcs_per_vnet);
+>>>>>>> 60728161b6 (mem-garnet: Update stats for Garnet)
/*
* We check if a bridge was enabled at any end of the link.
@@ -311,9 +321,14 @@
m_networklinks.push_back(net_link);
m_creditlinks.push_back(credit_link);
+<<<<<<< HEAD
m_max_vcs_per_vnet = std::max(m_max_vcs_per_vnet,
std::max(m_routers[dest]->get_vc_per_vnet(),
m_routers[src]->get_vc_per_vnet()));
+=======
+ assert(std::max((uint32_t) m_routers[dest]->get_vc_per_vnet(),
+ (uint32_t) m_routers[src]->get_vc_per_vnet()) <=
m_max_vcs_per_vnet);
+>>>>>>> 60728161b6 (mem-garnet: Update stats for Garnet)
/*
* We check if a bridge was enabled at any end of the link.
@@ -369,171 +384,157 @@
return m_nis[local_ni]->get_router_id(vnet);
}
-void
-GarnetNetwork::regStats()
+GarnetNetwork::GarnetStats::GarnetStats(
+ Stats::Group *parent, uint32_t num_virt_networks,
+ std::vector<BasicRouter*> routers):
+ Stats::Group(parent),
+ ADD_STAT(packetsReceived, "packets_received"),
+ ADD_STAT(packetsInjected, "packets_injected"),
+ ADD_STAT(packetNetworkLatency, "packet_network_latency"),
+ ADD_STAT(packetQueueingLatency, "packet_queueing_latency"),
+ ADD_STAT(avgPacketVnetLatency, "average_packet_vnet_latency"),
+ ADD_STAT(avgPacketVqueueLatency, "average_packet_vqueue_latency"),
+ ADD_STAT(avgPacketNetworkLatency, "average_packet_network_latency"),
+ ADD_STAT(avgPacketQueueingLatency, "average_packet_queueing_latency"),
+ ADD_STAT(avgPacketLatency, "average_packet_latency"),
+ ADD_STAT(flitsReceived, "flits_received"),
+ ADD_STAT(flitsInjected, "flits_injected"),
+ ADD_STAT(flitNetworkLatency, "flit_network_latency"),
+ ADD_STAT(flitQueueingLatency, "flit_queueing_latency"),
+ ADD_STAT(avgFlitVnetLatency, "average_flit_vnet_latency"),
+ ADD_STAT(avgFlitVqueueLatency, "average_flit_vqueue_latency"),
+ ADD_STAT(avgFlitNetworkLatency, "average_flit_network_latency"),
+ ADD_STAT(avgFlitQueueingLatency, "average_flit_queueing_latency"),
+ ADD_STAT(avgFlitLatency, "average_flit_latency"),
+ ADD_STAT(totalExtInLinkUtilization, "ext_in_link_utilization"),
+ ADD_STAT(totalExtOutLinkUtilization, "ext_out_link_utilization"),
+ ADD_STAT(averageLinkUtilization, "avg_link_utilization"),
+ ADD_STAT(averageVcLoad, "avg_vc_load"),
+ ADD_STAT(totalHops, "total_hops"),
+ ADD_STAT(avgHops, "average_hops")
{
- Network::regStats();
-
// Packets
- m_packets_received
- .init(m_virtual_networks)
- .name(name() + ".packets_received")
+ packetsReceived
+ .init(num_virt_networks)
.flags(statistics::pdf | statistics::total | statistics::nozero |
statistics::oneline)
;
- m_packets_injected
- .init(m_virtual_networks)
- .name(name() + ".packets_injected")
+ packetsInjected
+ .init(num_virt_networks)
.flags(statistics::pdf | statistics::total | statistics::nozero |
statistics::oneline)
;
- m_packet_network_latency
- .init(m_virtual_networks)
- .name(name() + ".packet_network_latency")
+ packetNetworkLatency
+ .init(num_virt_networks)
.flags(statistics::oneline)
;
- m_packet_queueing_latency
- .init(m_virtual_networks)
- .name(name() + ".packet_queueing_latency")
+ packetQueueingLatency
+ .init(num_virt_networks)
.flags(statistics::oneline)
;
- for (int i = 0; i < m_virtual_networks; i++) {
- m_packets_received.subname(i, csprintf("vnet-%i", i));
- m_packets_injected.subname(i, csprintf("vnet-%i", i));
- m_packet_network_latency.subname(i, csprintf("vnet-%i", i));
- m_packet_queueing_latency.subname(i, csprintf("vnet-%i", i));
+ for (int i = 0; i < num_virt_networks; i++) {
+ packetsReceived.subname(i, csprintf("vnet-%i", i));
+ packetsInjected.subname(i, csprintf("vnet-%i", i));
+ packetNetworkLatency.subname(i, csprintf("vnet-%i", i));
+ packetQueueingLatency.subname(i, csprintf("vnet-%i", i));
}
- m_avg_packet_vnet_latency
- .name(name() + ".average_packet_vnet_latency")
- .flags(statistics::oneline);
- m_avg_packet_vnet_latency =
- m_packet_network_latency / m_packets_received;
+ avgPacketVnetLatency.flags(statistics::oneline);
+ avgPacketVnetLatency = packetNetworkLatency / packetsReceived;
- m_avg_packet_vqueue_latency
- .name(name() + ".average_packet_vqueue_latency")
- .flags(statistics::oneline);
- m_avg_packet_vqueue_latency =
- m_packet_queueing_latency / m_packets_received;
+ avgPacketVqueueLatency.flags(statistics::oneline);
+ avgPacketVqueueLatency = packetQueueingLatency / packetsReceived;
- m_avg_packet_network_latency
- .name(name() + ".average_packet_network_latency");
- m_avg_packet_network_latency =
- sum(m_packet_network_latency) / sum(m_packets_received);
+ avgPacketNetworkLatency = sum(packetNetworkLatency) /
sum(packetsReceived);
- m_avg_packet_queueing_latency
- .name(name() + ".average_packet_queueing_latency");
- m_avg_packet_queueing_latency
- = sum(m_packet_queueing_latency) / sum(m_packets_received);
+ avgPacketQueueingLatency =
+ sum(packetQueueingLatency) / sum(packetsReceived);
- m_avg_packet_latency
- .name(name() + ".average_packet_latency");
- m_avg_packet_latency
- = m_avg_packet_network_latency + m_avg_packet_queueing_latency;
+ avgPacketLatency = avgPacketNetworkLatency + avgPacketQueueingLatency;
// Flits
- m_flits_received
- .init(m_virtual_networks)
- .name(name() + ".flits_received")
+ flitsReceived
+ .init(num_virt_networks)
.flags(statistics::pdf | statistics::total | statistics::nozero |
statistics::oneline)
;
- m_flits_injected
- .init(m_virtual_networks)
- .name(name() + ".flits_injected")
+ flitsInjected
+ .init(num_virt_networks)
.flags(statistics::pdf | statistics::total | statistics::nozero |
statistics::oneline)
;
- m_flit_network_latency
- .init(m_virtual_networks)
- .name(name() + ".flit_network_latency")
+ flitNetworkLatency
+ .init(num_virt_networks)
.flags(statistics::oneline)
;
- m_flit_queueing_latency
- .init(m_virtual_networks)
- .name(name() + ".flit_queueing_latency")
+ flitQueueingLatency
+ .init(num_virt_networks)
.flags(statistics::oneline)
;
- for (int i = 0; i < m_virtual_networks; i++) {
- m_flits_received.subname(i, csprintf("vnet-%i", i));
- m_flits_injected.subname(i, csprintf("vnet-%i", i));
- m_flit_network_latency.subname(i, csprintf("vnet-%i", i));
- m_flit_queueing_latency.subname(i, csprintf("vnet-%i", i));
+ int num_routers = routers.size();
+ uint32_t max_vcs_per_vnet = 0;
+ for (std::vector<BasicRouter*>::const_iterator i = routers.begin();
+ i != routers.end(); ++i) {
+ Router* router = safe_cast<Router*>(*i);
+ max_vcs_per_vnet = std::max(max_vcs_per_vnet,
+ router->get_vc_per_vnet());
}
- m_avg_flit_vnet_latency
- .name(name() + ".average_flit_vnet_latency")
- .flags(statistics::oneline);
- m_avg_flit_vnet_latency = m_flit_network_latency / m_flits_received;
+ averageVcLoad
+ .init(num_virt_networks * max_vcs_per_vnet)
+ .flags(statistics::pdf | statistics::total | statistics::nozero |
+ statistics::oneline)
+ ;
- m_avg_flit_vqueue_latency
- .name(name() + ".average_flit_vqueue_latency")
- .flags(statistics::oneline);
- m_avg_flit_vqueue_latency =
- m_flit_queueing_latency / m_flits_received;
+ for (int i = 0; i < num_virt_networks; i++) {
+ flitsReceived.subname(i, csprintf("vnet-%i", i));
+ flitsInjected.subname(i, csprintf("vnet-%i", i));
+ flitNetworkLatency.subname(i, csprintf("vnet-%i", i));
+ flitQueueingLatency.subname(i, csprintf("vnet-%i", i));
+ }
- m_avg_flit_network_latency
- .name(name() + ".average_flit_network_latency");
- m_avg_flit_network_latency =
- sum(m_flit_network_latency) / sum(m_flits_received);
+ avgFlitVnetLatency.flags(statistics::oneline);
+ avgFlitVnetLatency = flitNetworkLatency / flitsReceived;
- m_avg_flit_queueing_latency
- .name(name() + ".average_flit_queueing_latency");
- m_avg_flit_queueing_latency =
- sum(m_flit_queueing_latency) / sum(m_flits_received);
+ avgFlitVqueueLatency.flags(statistics::oneline);
+ avgFlitVqueueLatency = flitQueueingLatency / flitsReceived;
- m_avg_flit_latency
- .name(name() + ".average_flit_latency");
- m_avg_flit_latency =
- m_avg_flit_network_latency + m_avg_flit_queueing_latency;
+ avgFlitNetworkLatency = sum(flitNetworkLatency) / sum(flitsReceived);
+
+ avgFlitQueueingLatency = sum(flitQueueingLatency) / sum(flitsReceived);
+
+ avgFlitLatency = avgFlitNetworkLatency + avgFlitQueueingLatency;
// Hops
- m_avg_hops.name(name() + ".average_hops");
- m_avg_hops = m_total_hops / sum(m_flits_received);
-
- // Links
- m_total_ext_in_link_utilization
- .name(name() + ".ext_in_link_utilization");
- m_total_ext_out_link_utilization
- .name(name() + ".ext_out_link_utilization");
- m_total_int_link_utilization
- .name(name() + ".int_link_utilization");
- m_average_link_utilization
- .name(name() + ".avg_link_utilization");
- m_average_vc_load
- .init(m_virtual_networks * m_max_vcs_per_vnet)
- .name(name() + ".avg_vc_load")
- .flags(statistics::pdf | statistics::total | statistics::nozero |
- statistics::oneline)
- ;
+ avgHops = totalHops / sum(flitsReceived);
// Traffic distribution
- for (int source = 0; source < m_routers.size(); ++source) {
- m_data_traffic_distribution.push_back(
+ for (int source = 0; source < num_routers; ++source) {
+ dataTrafficDistribution.push_back(
std::vector<statistics::Scalar *>());
- m_ctrl_traffic_distribution.push_back(
+ ctrlTrafficDistribution.push_back(
std::vector<statistics::Scalar *>());
- for (int dest = 0; dest < m_routers.size(); ++dest) {
- statistics::Scalar *data_packets = new statistics::Scalar();
- statistics::Scalar *ctrl_packets = new statistics::Scalar();
-
- data_packets->name(name() + ".data_traffic_distribution."
+ "n" +
- std::to_string(source) + "." + "n" +
std::to_string(dest));
- m_data_traffic_distribution[source].push_back(data_packets);
-
- ctrl_packets->name(name() + ".ctrl_traffic_distribution."
+ "n" +
- std::to_string(source) + "." + "n" +
std::to_string(dest));
- m_ctrl_traffic_distribution[source].push_back(ctrl_packets);
+ for (int dest = 0; dest < num_routers; ++dest) {
+ dataTrafficDistribution[source].emplace_back(
+ new statistics::Scalar(this,
+ ("data_traffic_distribution.n" +
+ std::to_string(source) +
+ ".n" + std::to_string(dest)).c_str()));
+ ctrlTrafficDistribution[source].emplace_back(
+ new statistics::Scalar(this,
+ ("ctrl_traffic_distribution.n" +
+ std::to_string(source) +
+ ".n" + std::to_string(dest)).c_str()));
}
}
}
@@ -549,18 +550,19 @@
int activity = m_networklinks[i]->getLinkUtilization();
if (type == EXT_IN_)
- m_total_ext_in_link_utilization += activity;
+ garnetStats.totalExtInLinkUtilization += activity;
else if (type == EXT_OUT_)
- m_total_ext_out_link_utilization += activity;
+ garnetStats.totalExtOutLinkUtilization += activity;
else if (type == INT_)
- m_total_int_link_utilization += activity;
+ garnetStats.totalIntLinkUtilization += activity;
- m_average_link_utilization +=
+ garnetStats.averageLinkUtilization +=
(double(activity) / time_delta);
std::vector<unsigned int> vc_load = m_networklinks[i]->getVcLoad();
for (int j = 0; j < vc_load.size(); j++) {
- m_average_vc_load[j] += ((double)vc_load[j] / time_delta);
+ garnetStats.averageVcLoad[j] +=
+ ((double)vc_load[j] / time_delta);
}
}
@@ -598,9 +600,9 @@
int vnet = route.vnet;
if (m_vnet_type[vnet] == DATA_VNET_)
- (*m_data_traffic_distribution[src_node][dest_node])++;
+ (*garnetStats.dataTrafficDistribution[src_node][dest_node])++;
else
- (*m_ctrl_traffic_distribution[src_node][dest_node])++;
+ (*garnetStats.ctrlTrafficDistribution[src_node][dest_node])++;
}
uint32_t
diff --git a/src/mem/ruby/network/garnet/GarnetNetwork.hh
b/src/mem/ruby/network/garnet/GarnetNetwork.hh
index 912445b..f64852f 100644
--- a/src/mem/ruby/network/garnet/GarnetNetwork.hh
+++ b/src/mem/ruby/network/garnet/GarnetNetwork.hh
@@ -111,45 +111,60 @@
// Stats
void collateStats();
- void regStats();
void resetStats();
void print(std::ostream& out) const;
// increment counters
- void increment_injected_packets(int vnet) {
m_packets_injected[vnet]++; }
- void increment_received_packets(int vnet) {
m_packets_received[vnet]++; }
+ void
+ increment_injected_packets(int vnet)
+ {
+ garnetStats.packetsInjected[vnet]++;
+ }
+ void
+ increment_received_packets(int vnet)
+ {
+ garnetStats.packetsReceived[vnet]++;
+ }
void
increment_packet_network_latency(Tick latency, int vnet)
{
- m_packet_network_latency[vnet] += latency;
+ garnetStats.packetNetworkLatency[vnet] += latency;
}
void
increment_packet_queueing_latency(Tick latency, int vnet)
{
- m_packet_queueing_latency[vnet] += latency;
+ garnetStats.packetQueueingLatency[vnet] += latency;
}
- void increment_injected_flits(int vnet) { m_flits_injected[vnet]++; }
- void increment_received_flits(int vnet) { m_flits_received[vnet]++; }
+ void
+ increment_injected_flits(int vnet)
+ {
+ garnetStats.flitsInjected[vnet]++;
+ }
+ void
+ increment_received_flits(int vnet)
+ {
+ garnetStats.flitsReceived[vnet]++;
+ }
void
increment_flit_network_latency(Tick latency, int vnet)
{
- m_flit_network_latency[vnet] += latency;
+ garnetStats.flitNetworkLatency[vnet] += latency;
}
void
increment_flit_queueing_latency(Tick latency, int vnet)
{
- m_flit_queueing_latency[vnet] += latency;
+ garnetStats.flitQueueingLatency[vnet] += latency;
}
void
increment_total_hops(int hops)
{
- m_total_hops += hops;
+ garnetStats.totalHops += hops;
}
void update_traffic_distribution(RouteInfo route);
@@ -165,41 +180,6 @@
int m_routing_algorithm;
bool m_enable_fault_model;
- // Statistical variables
- statistics::Vector m_packets_received;
- statistics::Vector m_packets_injected;
- statistics::Vector m_packet_network_latency;
- statistics::Vector m_packet_queueing_latency;
-
- statistics::Formula m_avg_packet_vnet_latency;
- statistics::Formula m_avg_packet_vqueue_latency;
- statistics::Formula m_avg_packet_network_latency;
- statistics::Formula m_avg_packet_queueing_latency;
- statistics::Formula m_avg_packet_latency;
-
- statistics::Vector m_flits_received;
- statistics::Vector m_flits_injected;
- statistics::Vector m_flit_network_latency;
- statistics::Vector m_flit_queueing_latency;
-
- statistics::Formula m_avg_flit_vnet_latency;
- statistics::Formula m_avg_flit_vqueue_latency;
- statistics::Formula m_avg_flit_network_latency;
- statistics::Formula m_avg_flit_queueing_latency;
- statistics::Formula m_avg_flit_latency;
-
- statistics::Scalar m_total_ext_in_link_utilization;
- statistics::Scalar m_total_ext_out_link_utilization;
- statistics::Scalar m_total_int_link_utilization;
- statistics::Scalar m_average_link_utilization;
- statistics::Vector m_average_vc_load;
-
- statistics::Scalar m_total_hops;
- statistics::Formula m_avg_hops;
-
- std::vector<std::vector<statistics::Scalar *>>
m_data_traffic_distribution;
- std::vector<std::vector<statistics::Scalar *>>
m_ctrl_traffic_distribution;
-
private:
GarnetNetwork(const GarnetNetwork& obj);
GarnetNetwork& operator=(const GarnetNetwork& obj);
@@ -209,6 +189,46 @@
std::vector<NetworkLink *> m_networklinks; // All flit links in the
network
std::vector<CreditLink *> m_creditlinks; // All credit links in the
network
std::vector<NetworkInterface *> m_nis; // All NI's in Network
+
+ public:
+ struct GarnetStats : public Stats::Group
+ {
+ GarnetStats(Stats::Group *parent, uint32_t num_virt_networks,
+ std::vector<BasicRouter*> routers);
+ statistics::Vector packetsReceived;
+ statistics::Vector packetsInjected;
+ statistics::Vector packetNetworkLatency;
+ statistics::Vector packetQueueingLatency;
+
+ statistics::Formula avgPacketVnetLatency;
+ statistics::Formula avgPacketVqueueLatency;
+ statistics::Formula avgPacketNetworkLatency;
+ statistics::Formula avgPacketQueueingLatency;
+ statistics::Formula avgPacketLatency;
+
+ statistics::Vector flitsReceived;
+ statistics::Vector flitsInjected;
+ statistics::Vector flitNetworkLatency;
+ statistics::Vector flitQueueingLatency;
+
+ statistics::Formula avgFlitVnetLatency;
+ statistics::Formula avgFlitVqueueLatency;
+ statistics::Formula avgFlitNetworkLatency;
+ statistics::Formula avgFlitQueueingLatency;
+ statistics::Formula avgFlitLatency;
+
+ statistics::Scalar totalExtInLinkUtilization;
+ statistics::Scalar totalExtOutLinkUtilization;
+ statistics::Scalar totalIntLinkUtilization;
+ statistics::Scalar averageLinkUtilization;
+ statistics::Vector averageVcLoad;
+
+ statistics::Scalar totalHops;
+ statistics::Formula avgHops;
+
+ std::vector<std::vector<statistics::Scalar *>>
dataTrafficDistribution;
+ std::vector<std::vector<statistics::Scalar *>>
ctrlTrafficDistribution;
+ } garnetStats;
};
inline std::ostream&
--
To view, visit https://gem5-review.googlesource.com/c/public/gem5/+/58529
To unsubscribe, or for help writing mail filters, visit
https://gem5-review.googlesource.com/settings
Gerrit-Project: public/gem5
Gerrit-Branch: develop
Gerrit-Change-Id: I5c575e2c6623cd1ffcb96c1d13a4d2767f7511b6
Gerrit-Change-Number: 58529
Gerrit-PatchSet: 1
Gerrit-Owner: Srikant Bharadwaj <srikant.bharad...@amd.com>
Gerrit-MessageType: newchange
_______________________________________________
gem5-dev mailing list -- gem5-dev@gem5.org
To unsubscribe send an email to gem5-dev-le...@gem5.org
%(web_page_url)slistinfo%(cgiext)s/%(_internal_name)s