* Authors: Niket Agarwal
*/
+#include <cassert>
+
#include "base/stl_helpers.hh"
-#include "mem/ruby/network/garnet/flexible-pipeline/GarnetNetwork.hh"
#include "mem/protocol/MachineType.hh"
-#include "mem/ruby/network/garnet/flexible-pipeline/NetworkInterface.hh"
#include "mem/ruby/buffers/MessageBuffer.hh"
-#include "mem/ruby/network/garnet/flexible-pipeline/Router.hh"
-#include "mem/ruby/network/simple/Topology.hh"
-#include "mem/ruby/network/simple/SimpleNetwork.hh"
+#include "mem/ruby/common/NetDest.hh"
#include "mem/ruby/network/garnet/fixed-pipeline/GarnetNetwork_d.hh"
+#include "mem/ruby/network/garnet/flexible-pipeline/GarnetNetwork.hh"
+#include "mem/ruby/network/garnet/flexible-pipeline/NetworkInterface.hh"
#include "mem/ruby/network/garnet/flexible-pipeline/NetworkLink.hh"
-#include "mem/ruby/common/NetDest.hh"
+#include "mem/ruby/network/garnet/flexible-pipeline/Router.hh"
+#include "mem/ruby/network/simple/SimpleNetwork.hh"
+#include "mem/ruby/network/Topology.hh"
using namespace std;
using m5::stl_helpers::deletePointers;
: BaseGarnetNetwork(p)
{
m_ruby_start = 0;
+ m_flits_received = 0;
+ m_flits_injected = 0;
+ m_network_latency = 0.0;
+ m_queueing_latency = 0.0;
// Allocate to and from queues
GarnetNetwork::checkNetworkAllocation(NodeID id, bool ordered,
int network_num)
{
- printf ("id = %i, m_nodes = %i \n", id, m_nodes);
- ASSERT(id < m_nodes);
- ASSERT(network_num < m_virtual_networks);
+ assert(id < m_nodes);
+ assert(network_num < m_virtual_networks);
if (ordered) {
m_ordered[network_num] = true;
out << "-------------" << endl;
for (int i = 0; i < m_vcs_per_class*m_virtual_networks; i++) {
+ if (!m_in_use[i/m_vcs_per_class])
+ continue;
+
average_vc_load[i] = (double(average_vc_load[i]) /
(double(g_eventQueue_ptr->getTime()) - m_ruby_start));
out << "Average VC Load [" << i << "] = " << average_vc_load[i] <<
" flits/cycle" << endl;
}
out << "-------------" << endl;
+
+ out << "Total flits injected = " << m_flits_injected << endl;
+ out << "Total flits received = " << m_flits_received << endl;
+ out << "Average network latency = "
+ << ((double) m_network_latency/ (double) m_flits_received)<< endl;
+ out << "Average queueing (at source NI) latency = "
+ << ((double) m_queueing_latency/ (double) m_flits_received)<< endl;
+ out << "Average latency = "
+ << ((double) (m_queueing_latency + m_network_latency) /
+ (double) m_flits_received)<< endl;
+ out << "-------------" << endl;
+
m_topology_ptr->printStats(out);
}