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

Reply via email to