GarnetNetwork.hh revision 11666
111666Stushar@ece.gatech.edu/* 211666Stushar@ece.gatech.edu * Copyright (c) 2008 Princeton University 311666Stushar@ece.gatech.edu * Copyright (c) 2016 Georgia Institute of Technology 411666Stushar@ece.gatech.edu * All rights reserved. 511666Stushar@ece.gatech.edu * 611666Stushar@ece.gatech.edu * Redistribution and use in source and binary forms, with or without 711666Stushar@ece.gatech.edu * modification, are permitted provided that the following conditions are 811666Stushar@ece.gatech.edu * met: redistributions of source code must retain the above copyright 911666Stushar@ece.gatech.edu * notice, this list of conditions and the following disclaimer; 1011666Stushar@ece.gatech.edu * redistributions in binary form must reproduce the above copyright 1111666Stushar@ece.gatech.edu * notice, this list of conditions and the following disclaimer in the 1211666Stushar@ece.gatech.edu * documentation and/or other materials provided with the distribution; 1311666Stushar@ece.gatech.edu * neither the name of the copyright holders nor the names of its 1411666Stushar@ece.gatech.edu * contributors may be used to endorse or promote products derived from 1511666Stushar@ece.gatech.edu * this software without specific prior written permission. 1611666Stushar@ece.gatech.edu * 1711666Stushar@ece.gatech.edu * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 1811666Stushar@ece.gatech.edu * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 1911666Stushar@ece.gatech.edu * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 2011666Stushar@ece.gatech.edu * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 2111666Stushar@ece.gatech.edu * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 2211666Stushar@ece.gatech.edu * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 2311666Stushar@ece.gatech.edu * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 2411666Stushar@ece.gatech.edu * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 2511666Stushar@ece.gatech.edu * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 2611666Stushar@ece.gatech.edu * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 2711666Stushar@ece.gatech.edu * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 2811666Stushar@ece.gatech.edu * 2911666Stushar@ece.gatech.edu * Authors: Niket Agarwal 3011666Stushar@ece.gatech.edu * Tushar Krishna 3111666Stushar@ece.gatech.edu */ 3211666Stushar@ece.gatech.edu 3311666Stushar@ece.gatech.edu 3411666Stushar@ece.gatech.edu#ifndef __MEM_RUBY_NETWORK_GARNET_NETWORK_HH__ 3511666Stushar@ece.gatech.edu#define __MEM_RUBY_NETWORK_GARNET_NETWORK_HH__ 3611666Stushar@ece.gatech.edu 3711666Stushar@ece.gatech.edu#include <iostream> 3811666Stushar@ece.gatech.edu#include <vector> 3911666Stushar@ece.gatech.edu 4011666Stushar@ece.gatech.edu#include "mem/ruby/network/Network.hh" 4111666Stushar@ece.gatech.edu#include "mem/ruby/network/fault_model/FaultModel.hh" 4211666Stushar@ece.gatech.edu#include "mem/ruby/network/garnet2.0/CommonTypes.hh" 4311666Stushar@ece.gatech.edu#include "params/GarnetNetwork.hh" 4411666Stushar@ece.gatech.edu 4511666Stushar@ece.gatech.educlass FaultModel; 4611666Stushar@ece.gatech.educlass NetworkInterface; 4711666Stushar@ece.gatech.educlass Router; 4811666Stushar@ece.gatech.educlass NetDest; 4911666Stushar@ece.gatech.educlass NetworkLink; 5011666Stushar@ece.gatech.educlass CreditLink; 5111666Stushar@ece.gatech.edu 5211666Stushar@ece.gatech.educlass GarnetNetwork : public Network 5311666Stushar@ece.gatech.edu{ 5411666Stushar@ece.gatech.edu public: 5511666Stushar@ece.gatech.edu typedef GarnetNetworkParams Params; 5611666Stushar@ece.gatech.edu GarnetNetwork(const Params *p); 5711666Stushar@ece.gatech.edu 5811666Stushar@ece.gatech.edu ~GarnetNetwork(); 5911666Stushar@ece.gatech.edu void init(); 6011666Stushar@ece.gatech.edu 6111666Stushar@ece.gatech.edu // Configuration (set externally) 6211666Stushar@ece.gatech.edu 6311666Stushar@ece.gatech.edu // for 2D topology 6411666Stushar@ece.gatech.edu int getNumRows() const { return m_num_rows; } 6511666Stushar@ece.gatech.edu int getNumCols() { return m_num_cols; } 6611666Stushar@ece.gatech.edu 6711666Stushar@ece.gatech.edu // for network 6811666Stushar@ece.gatech.edu uint32_t getNiFlitSize() const { return m_ni_flit_size; } 6911666Stushar@ece.gatech.edu uint32_t getVCsPerVnet() const { return m_vcs_per_vnet; } 7011666Stushar@ece.gatech.edu uint32_t getBuffersPerDataVC() { return m_buffers_per_data_vc; } 7111666Stushar@ece.gatech.edu uint32_t getBuffersPerCtrlVC() { return m_buffers_per_ctrl_vc; } 7211666Stushar@ece.gatech.edu int getRoutingAlgorithm() const { return m_routing_algorithm; } 7311666Stushar@ece.gatech.edu 7411666Stushar@ece.gatech.edu bool isFaultModelEnabled() const { return m_enable_fault_model; } 7511666Stushar@ece.gatech.edu FaultModel* fault_model; 7611666Stushar@ece.gatech.edu 7711666Stushar@ece.gatech.edu 7811666Stushar@ece.gatech.edu // Internal configuration 7911666Stushar@ece.gatech.edu bool isVNetOrdered(int vnet) const { return m_ordered[vnet]; } 8011666Stushar@ece.gatech.edu VNET_type 8111666Stushar@ece.gatech.edu get_vnet_type(int vc) 8211666Stushar@ece.gatech.edu { 8311666Stushar@ece.gatech.edu int vnet = vc/getVCsPerVnet(); 8411666Stushar@ece.gatech.edu return m_vnet_type[vnet]; 8511666Stushar@ece.gatech.edu } 8611666Stushar@ece.gatech.edu int getNumRouters(); 8711666Stushar@ece.gatech.edu int get_router_id(int ni); 8811666Stushar@ece.gatech.edu 8911666Stushar@ece.gatech.edu 9011666Stushar@ece.gatech.edu // Methods used by Topology to setup the network 9111666Stushar@ece.gatech.edu void makeExtOutLink(SwitchID src, NodeID dest, BasicLink* link, 9211666Stushar@ece.gatech.edu const NetDest& routing_table_entry); 9311666Stushar@ece.gatech.edu void makeExtInLink(NodeID src, SwitchID dest, BasicLink* link, 9411666Stushar@ece.gatech.edu const NetDest& routing_table_entry); 9511666Stushar@ece.gatech.edu void makeInternalLink(SwitchID src, SwitchID dest, BasicLink* link, 9611666Stushar@ece.gatech.edu const NetDest& routing_table_entry, 9711666Stushar@ece.gatech.edu PortDirection src_outport_dirn, 9811666Stushar@ece.gatech.edu PortDirection dest_inport_dirn); 9911666Stushar@ece.gatech.edu 10011666Stushar@ece.gatech.edu //! Function for performing a functional write. The return value 10111666Stushar@ece.gatech.edu //! indicates the number of messages that were written. 10211666Stushar@ece.gatech.edu uint32_t functionalWrite(Packet *pkt); 10311666Stushar@ece.gatech.edu 10411666Stushar@ece.gatech.edu // Stats 10511666Stushar@ece.gatech.edu void collateStats(); 10611666Stushar@ece.gatech.edu void regStats(); 10711666Stushar@ece.gatech.edu void print(std::ostream& out) const; 10811666Stushar@ece.gatech.edu 10911666Stushar@ece.gatech.edu // increment counters 11011666Stushar@ece.gatech.edu void increment_injected_packets(int vnet) { m_packets_injected[vnet]++; } 11111666Stushar@ece.gatech.edu void increment_received_packets(int vnet) { m_packets_received[vnet]++; } 11211666Stushar@ece.gatech.edu 11311666Stushar@ece.gatech.edu void 11411666Stushar@ece.gatech.edu increment_packet_network_latency(Cycles latency, int vnet) 11511666Stushar@ece.gatech.edu { 11611666Stushar@ece.gatech.edu m_packet_network_latency[vnet] += latency; 11711666Stushar@ece.gatech.edu } 11811666Stushar@ece.gatech.edu 11911666Stushar@ece.gatech.edu void 12011666Stushar@ece.gatech.edu increment_packet_queueing_latency(Cycles latency, int vnet) 12111666Stushar@ece.gatech.edu { 12211666Stushar@ece.gatech.edu m_packet_queueing_latency[vnet] += latency; 12311666Stushar@ece.gatech.edu } 12411666Stushar@ece.gatech.edu 12511666Stushar@ece.gatech.edu void increment_injected_flits(int vnet) { m_flits_injected[vnet]++; } 12611666Stushar@ece.gatech.edu void increment_received_flits(int vnet) { m_flits_received[vnet]++; } 12711666Stushar@ece.gatech.edu 12811666Stushar@ece.gatech.edu void 12911666Stushar@ece.gatech.edu increment_flit_network_latency(Cycles latency, int vnet) 13011666Stushar@ece.gatech.edu { 13111666Stushar@ece.gatech.edu m_flit_network_latency[vnet] += latency; 13211666Stushar@ece.gatech.edu } 13311666Stushar@ece.gatech.edu 13411666Stushar@ece.gatech.edu void 13511666Stushar@ece.gatech.edu increment_flit_queueing_latency(Cycles latency, int vnet) 13611666Stushar@ece.gatech.edu { 13711666Stushar@ece.gatech.edu m_flit_queueing_latency[vnet] += latency; 13811666Stushar@ece.gatech.edu } 13911666Stushar@ece.gatech.edu 14011666Stushar@ece.gatech.edu void 14111666Stushar@ece.gatech.edu increment_total_hops(int hops) 14211666Stushar@ece.gatech.edu { 14311666Stushar@ece.gatech.edu m_total_hops += hops; 14411666Stushar@ece.gatech.edu } 14511666Stushar@ece.gatech.edu 14611666Stushar@ece.gatech.edu protected: 14711666Stushar@ece.gatech.edu // Configuration 14811666Stushar@ece.gatech.edu int m_num_rows; 14911666Stushar@ece.gatech.edu int m_num_cols; 15011666Stushar@ece.gatech.edu uint32_t m_ni_flit_size; 15111666Stushar@ece.gatech.edu uint32_t m_vcs_per_vnet; 15211666Stushar@ece.gatech.edu uint32_t m_buffers_per_ctrl_vc; 15311666Stushar@ece.gatech.edu uint32_t m_buffers_per_data_vc; 15411666Stushar@ece.gatech.edu int m_routing_algorithm; 15511666Stushar@ece.gatech.edu bool m_enable_fault_model; 15611666Stushar@ece.gatech.edu 15711666Stushar@ece.gatech.edu // Statistical variables 15811666Stushar@ece.gatech.edu Stats::Vector m_packets_received; 15911666Stushar@ece.gatech.edu Stats::Vector m_packets_injected; 16011666Stushar@ece.gatech.edu Stats::Vector m_packet_network_latency; 16111666Stushar@ece.gatech.edu Stats::Vector m_packet_queueing_latency; 16211666Stushar@ece.gatech.edu 16311666Stushar@ece.gatech.edu Stats::Formula m_avg_packet_vnet_latency; 16411666Stushar@ece.gatech.edu Stats::Formula m_avg_packet_vqueue_latency; 16511666Stushar@ece.gatech.edu Stats::Formula m_avg_packet_network_latency; 16611666Stushar@ece.gatech.edu Stats::Formula m_avg_packet_queueing_latency; 16711666Stushar@ece.gatech.edu Stats::Formula m_avg_packet_latency; 16811666Stushar@ece.gatech.edu 16911666Stushar@ece.gatech.edu Stats::Vector m_flits_received; 17011666Stushar@ece.gatech.edu Stats::Vector m_flits_injected; 17111666Stushar@ece.gatech.edu Stats::Vector m_flit_network_latency; 17211666Stushar@ece.gatech.edu Stats::Vector m_flit_queueing_latency; 17311666Stushar@ece.gatech.edu 17411666Stushar@ece.gatech.edu Stats::Formula m_avg_flit_vnet_latency; 17511666Stushar@ece.gatech.edu Stats::Formula m_avg_flit_vqueue_latency; 17611666Stushar@ece.gatech.edu Stats::Formula m_avg_flit_network_latency; 17711666Stushar@ece.gatech.edu Stats::Formula m_avg_flit_queueing_latency; 17811666Stushar@ece.gatech.edu Stats::Formula m_avg_flit_latency; 17911666Stushar@ece.gatech.edu 18011666Stushar@ece.gatech.edu Stats::Scalar m_total_ext_in_link_utilization; 18111666Stushar@ece.gatech.edu Stats::Scalar m_total_ext_out_link_utilization; 18211666Stushar@ece.gatech.edu Stats::Scalar m_total_int_link_utilization; 18311666Stushar@ece.gatech.edu Stats::Scalar m_average_link_utilization; 18411666Stushar@ece.gatech.edu Stats::Vector m_average_vc_load; 18511666Stushar@ece.gatech.edu 18611666Stushar@ece.gatech.edu Stats::Scalar m_total_hops; 18711666Stushar@ece.gatech.edu Stats::Formula m_avg_hops; 18811666Stushar@ece.gatech.edu 18911666Stushar@ece.gatech.edu private: 19011666Stushar@ece.gatech.edu GarnetNetwork(const GarnetNetwork& obj); 19111666Stushar@ece.gatech.edu GarnetNetwork& operator=(const GarnetNetwork& obj); 19211666Stushar@ece.gatech.edu 19311666Stushar@ece.gatech.edu std::vector<VNET_type > m_vnet_type; 19411666Stushar@ece.gatech.edu std::vector<Router *> m_routers; // All Routers in Network 19511666Stushar@ece.gatech.edu std::vector<NetworkLink *> m_networklinks; // All flit links in the network 19611666Stushar@ece.gatech.edu std::vector<CreditLink *> m_creditlinks; // All credit links in the network 19711666Stushar@ece.gatech.edu std::vector<NetworkInterface *> m_nis; // All NI's in Network 19811666Stushar@ece.gatech.edu}; 19911666Stushar@ece.gatech.edu 20011666Stushar@ece.gatech.eduinline std::ostream& 20111666Stushar@ece.gatech.eduoperator<<(std::ostream& out, const GarnetNetwork& obj) 20211666Stushar@ece.gatech.edu{ 20311666Stushar@ece.gatech.edu obj.print(out); 20411666Stushar@ece.gatech.edu out << std::flush; 20511666Stushar@ece.gatech.edu return out; 20611666Stushar@ece.gatech.edu} 20711666Stushar@ece.gatech.edu 20811666Stushar@ece.gatech.edu#endif // __MEM_RUBY_NETWORK_GARNET_NETWORK_HH__ 209