SimpleNetwork.cc revision 8645
112027Sjungma@eit.uni-kl.de/* 212027Sjungma@eit.uni-kl.de * Copyright (c) 1999-2008 Mark D. Hill and David A. Wood 312027Sjungma@eit.uni-kl.de * All rights reserved. 412027Sjungma@eit.uni-kl.de * 512027Sjungma@eit.uni-kl.de * Redistribution and use in source and binary forms, with or without 612027Sjungma@eit.uni-kl.de * modification, are permitted provided that the following conditions are 712027Sjungma@eit.uni-kl.de * met: redistributions of source code must retain the above copyright 812027Sjungma@eit.uni-kl.de * notice, this list of conditions and the following disclaimer; 912027Sjungma@eit.uni-kl.de * redistributions in binary form must reproduce the above copyright 1012027Sjungma@eit.uni-kl.de * notice, this list of conditions and the following disclaimer in the 1112027Sjungma@eit.uni-kl.de * documentation and/or other materials provided with the distribution; 1212027Sjungma@eit.uni-kl.de * neither the name of the copyright holders nor the names of its 1312027Sjungma@eit.uni-kl.de * contributors may be used to endorse or promote products derived from 1412027Sjungma@eit.uni-kl.de * this software without specific prior written permission. 1512027Sjungma@eit.uni-kl.de * 1612027Sjungma@eit.uni-kl.de * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 1712027Sjungma@eit.uni-kl.de * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 1812027Sjungma@eit.uni-kl.de * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 1912027Sjungma@eit.uni-kl.de * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 2012027Sjungma@eit.uni-kl.de * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 2112027Sjungma@eit.uni-kl.de * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 2212027Sjungma@eit.uni-kl.de * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 2312027Sjungma@eit.uni-kl.de * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 2412027Sjungma@eit.uni-kl.de * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 2512027Sjungma@eit.uni-kl.de * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 2612027Sjungma@eit.uni-kl.de * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 2712027Sjungma@eit.uni-kl.de */ 2812027Sjungma@eit.uni-kl.de 2912027Sjungma@eit.uni-kl.de#include <cassert> 3012027Sjungma@eit.uni-kl.de#include <numeric> 3112027Sjungma@eit.uni-kl.de 3212027Sjungma@eit.uni-kl.de#include "base/cast.hh" 3312027Sjungma@eit.uni-kl.de#include "base/stl_helpers.hh" 3412027Sjungma@eit.uni-kl.de#include "mem/protocol/TopologyType.hh" 3512027Sjungma@eit.uni-kl.de#include "mem/ruby/buffers/MessageBuffer.hh" 3612027Sjungma@eit.uni-kl.de#include "mem/ruby/common/NetDest.hh" 3712027Sjungma@eit.uni-kl.de#include "mem/ruby/network/BasicLink.hh" 3812027Sjungma@eit.uni-kl.de#include "mem/ruby/network/simple/SimpleLink.hh" 3912027Sjungma@eit.uni-kl.de#include "mem/ruby/network/simple/SimpleNetwork.hh" 4012027Sjungma@eit.uni-kl.de#include "mem/ruby/network/simple/Switch.hh" 4112027Sjungma@eit.uni-kl.de#include "mem/ruby/network/simple/Throttle.hh" 4212027Sjungma@eit.uni-kl.de#include "mem/ruby/network/Topology.hh" 4312027Sjungma@eit.uni-kl.de#include "mem/ruby/profiler/Profiler.hh" 4412027Sjungma@eit.uni-kl.de#include "mem/ruby/system/System.hh" 4512027Sjungma@eit.uni-kl.de 4612027Sjungma@eit.uni-kl.deusing namespace std; 4712027Sjungma@eit.uni-kl.deusing m5::stl_helpers::deletePointers; 4812027Sjungma@eit.uni-kl.de 4912027Sjungma@eit.uni-kl.deSimpleNetwork::SimpleNetwork(const Params *p) 5012027Sjungma@eit.uni-kl.de : Network(p) 5112027Sjungma@eit.uni-kl.de{ 5212027Sjungma@eit.uni-kl.de m_buffer_size = p->buffer_size; 5312027Sjungma@eit.uni-kl.de m_endpoint_bandwidth = p->endpoint_bandwidth; 5412027Sjungma@eit.uni-kl.de m_adaptive_routing = p->adaptive_routing; 5512027Sjungma@eit.uni-kl.de 5612027Sjungma@eit.uni-kl.de // Note: the parent Network Object constructor is called before the 5712027Sjungma@eit.uni-kl.de // SimpleNetwork child constructor. Therefore, the member variables 5812027Sjungma@eit.uni-kl.de // used below should already be initialized. 5912027Sjungma@eit.uni-kl.de 6012027Sjungma@eit.uni-kl.de m_endpoint_switches.resize(m_nodes); 6112027Sjungma@eit.uni-kl.de 6212027Sjungma@eit.uni-kl.de m_in_use.resize(m_virtual_networks); 6312027Sjungma@eit.uni-kl.de m_ordered.resize(m_virtual_networks); 6412027Sjungma@eit.uni-kl.de for (int i = 0; i < m_virtual_networks; i++) { 6512027Sjungma@eit.uni-kl.de m_in_use[i] = false; 6612027Sjungma@eit.uni-kl.de m_ordered[i] = false; 6712027Sjungma@eit.uni-kl.de } 6812027Sjungma@eit.uni-kl.de 6912027Sjungma@eit.uni-kl.de // Allocate to and from queues 7012027Sjungma@eit.uni-kl.de m_toNetQueues.resize(m_nodes); 7112027Sjungma@eit.uni-kl.de m_fromNetQueues.resize(m_nodes); 7212027Sjungma@eit.uni-kl.de for (int node = 0; node < m_nodes; node++) { 7312027Sjungma@eit.uni-kl.de m_toNetQueues[node].resize(m_virtual_networks); 7412027Sjungma@eit.uni-kl.de m_fromNetQueues[node].resize(m_virtual_networks); 7512027Sjungma@eit.uni-kl.de for (int j = 0; j < m_virtual_networks; j++) { 7612027Sjungma@eit.uni-kl.de m_toNetQueues[node][j] = 7712027Sjungma@eit.uni-kl.de new MessageBuffer(csprintf("toNet node %d j %d", node, j)); 7812027Sjungma@eit.uni-kl.de m_fromNetQueues[node][j] = 7912027Sjungma@eit.uni-kl.de new MessageBuffer(csprintf("fromNet node %d j %d", node, j)); 8012027Sjungma@eit.uni-kl.de } 8112027Sjungma@eit.uni-kl.de } 8212027Sjungma@eit.uni-kl.de} 8312027Sjungma@eit.uni-kl.de 8412027Sjungma@eit.uni-kl.devoid 8512027Sjungma@eit.uni-kl.deSimpleNetwork::init() 8612027Sjungma@eit.uni-kl.de{ 8712027Sjungma@eit.uni-kl.de Network::init(); 8812027Sjungma@eit.uni-kl.de 8912027Sjungma@eit.uni-kl.de // The topology pointer should have already been initialized in 9012027Sjungma@eit.uni-kl.de // the parent class network constructor. 9112027Sjungma@eit.uni-kl.de assert(m_topology_ptr != NULL); 9212027Sjungma@eit.uni-kl.de int number_of_switches = m_topology_ptr->numSwitches(); 9312027Sjungma@eit.uni-kl.de for (int i = 0; i < number_of_switches; i++) { 9412027Sjungma@eit.uni-kl.de m_switch_ptr_vector.push_back(new Switch(i, this)); 9512027Sjungma@eit.uni-kl.de } 9612027Sjungma@eit.uni-kl.de 9712027Sjungma@eit.uni-kl.de // false because this isn't a reconfiguration 9812027Sjungma@eit.uni-kl.de m_topology_ptr->createLinks(this, false); 9912027Sjungma@eit.uni-kl.de} 10012027Sjungma@eit.uni-kl.de 10112027Sjungma@eit.uni-kl.devoid 10212027Sjungma@eit.uni-kl.deSimpleNetwork::reset() 10312027Sjungma@eit.uni-kl.de{ 10412027Sjungma@eit.uni-kl.de for (int node = 0; node < m_nodes; node++) { 10512027Sjungma@eit.uni-kl.de for (int j = 0; j < m_virtual_networks; j++) { 10612027Sjungma@eit.uni-kl.de m_toNetQueues[node][j]->clear(); 10712027Sjungma@eit.uni-kl.de m_fromNetQueues[node][j]->clear(); 10812027Sjungma@eit.uni-kl.de } 10912027Sjungma@eit.uni-kl.de } 11012027Sjungma@eit.uni-kl.de 11112027Sjungma@eit.uni-kl.de for(int i = 0; i < m_switch_ptr_vector.size(); i++){ 11212027Sjungma@eit.uni-kl.de m_switch_ptr_vector[i]->clearBuffers(); 11312027Sjungma@eit.uni-kl.de } 11412027Sjungma@eit.uni-kl.de} 11512027Sjungma@eit.uni-kl.de 11612027Sjungma@eit.uni-kl.deSimpleNetwork::~SimpleNetwork() 11712027Sjungma@eit.uni-kl.de{ 11812027Sjungma@eit.uni-kl.de for (int i = 0; i < m_nodes; i++) { 11912027Sjungma@eit.uni-kl.de deletePointers(m_toNetQueues[i]); 12012027Sjungma@eit.uni-kl.de deletePointers(m_fromNetQueues[i]); 12112027Sjungma@eit.uni-kl.de } 12212027Sjungma@eit.uni-kl.de deletePointers(m_switch_ptr_vector); 12312027Sjungma@eit.uni-kl.de deletePointers(m_buffers_to_free); 12412027Sjungma@eit.uni-kl.de // delete m_topology_ptr; 12512027Sjungma@eit.uni-kl.de} 12612027Sjungma@eit.uni-kl.de 12712027Sjungma@eit.uni-kl.de// From a switch to an endpoint node 12812027Sjungma@eit.uni-kl.devoid 12912027Sjungma@eit.uni-kl.deSimpleNetwork::makeOutLink(SwitchID src, NodeID dest, BasicLink* link, 13012027Sjungma@eit.uni-kl.de LinkDirection direction, 13112027Sjungma@eit.uni-kl.de const NetDest& routing_table_entry, 13212027Sjungma@eit.uni-kl.de bool isReconfiguration) 13312027Sjungma@eit.uni-kl.de{ 13412027Sjungma@eit.uni-kl.de assert(dest < m_nodes); 13512027Sjungma@eit.uni-kl.de assert(src < m_switch_ptr_vector.size()); 13612027Sjungma@eit.uni-kl.de assert(m_switch_ptr_vector[src] != NULL); 13712027Sjungma@eit.uni-kl.de 13812027Sjungma@eit.uni-kl.de if (isReconfiguration) { 13912027Sjungma@eit.uni-kl.de m_switch_ptr_vector[src]->reconfigureOutPort(routing_table_entry); 14012027Sjungma@eit.uni-kl.de return; 14112027Sjungma@eit.uni-kl.de } 14212027Sjungma@eit.uni-kl.de 14312027Sjungma@eit.uni-kl.de SimpleExtLink *simple_link = safe_cast<SimpleExtLink*>(link); 14412027Sjungma@eit.uni-kl.de 14512027Sjungma@eit.uni-kl.de m_switch_ptr_vector[src]->addOutPort(m_fromNetQueues[dest], 14612027Sjungma@eit.uni-kl.de routing_table_entry, 14712027Sjungma@eit.uni-kl.de simple_link->m_latency, 14812027Sjungma@eit.uni-kl.de simple_link->m_bw_multiplier); 14912027Sjungma@eit.uni-kl.de 15012027Sjungma@eit.uni-kl.de m_endpoint_switches[dest] = m_switch_ptr_vector[src]; 15112027Sjungma@eit.uni-kl.de} 15212027Sjungma@eit.uni-kl.de 15312027Sjungma@eit.uni-kl.de// From an endpoint node to a switch 15412027Sjungma@eit.uni-kl.devoid 15512027Sjungma@eit.uni-kl.deSimpleNetwork::makeInLink(NodeID src, SwitchID dest, BasicLink* link, 15612027Sjungma@eit.uni-kl.de LinkDirection direction, 15712027Sjungma@eit.uni-kl.de const NetDest& routing_table_entry, 15812027Sjungma@eit.uni-kl.de bool isReconfiguration) 15912027Sjungma@eit.uni-kl.de{ 16012027Sjungma@eit.uni-kl.de assert(src < m_nodes); 16112027Sjungma@eit.uni-kl.de if (isReconfiguration) { 16212027Sjungma@eit.uni-kl.de // do nothing 16312027Sjungma@eit.uni-kl.de return; 16412027Sjungma@eit.uni-kl.de } 16512027Sjungma@eit.uni-kl.de 16612027Sjungma@eit.uni-kl.de m_switch_ptr_vector[dest]->addInPort(m_toNetQueues[src]); 16712027Sjungma@eit.uni-kl.de} 16812027Sjungma@eit.uni-kl.de 16912027Sjungma@eit.uni-kl.de// From a switch to a switch 17012027Sjungma@eit.uni-kl.devoid 17112027Sjungma@eit.uni-kl.deSimpleNetwork::makeInternalLink(SwitchID src, SwitchID dest, BasicLink* link, 17212027Sjungma@eit.uni-kl.de LinkDirection direction, 17312027Sjungma@eit.uni-kl.de const NetDest& routing_table_entry, 17412027Sjungma@eit.uni-kl.de bool isReconfiguration) 17512027Sjungma@eit.uni-kl.de{ 17612027Sjungma@eit.uni-kl.de if (isReconfiguration) { 17712027Sjungma@eit.uni-kl.de m_switch_ptr_vector[src]->reconfigureOutPort(routing_table_entry); 17812027Sjungma@eit.uni-kl.de return; 17912027Sjungma@eit.uni-kl.de } 18012027Sjungma@eit.uni-kl.de 18112027Sjungma@eit.uni-kl.de // Create a set of new MessageBuffers 18212027Sjungma@eit.uni-kl.de std::vector<MessageBuffer*> queues; 18312027Sjungma@eit.uni-kl.de for (int i = 0; i < m_virtual_networks; i++) { 18412027Sjungma@eit.uni-kl.de // allocate a buffer 18512027Sjungma@eit.uni-kl.de MessageBuffer* buffer_ptr = new MessageBuffer; 18612027Sjungma@eit.uni-kl.de buffer_ptr->setOrdering(true); 18712027Sjungma@eit.uni-kl.de if (m_buffer_size > 0) { 18812027Sjungma@eit.uni-kl.de buffer_ptr->resize(m_buffer_size); 18912027Sjungma@eit.uni-kl.de } 19012027Sjungma@eit.uni-kl.de queues.push_back(buffer_ptr); 19112027Sjungma@eit.uni-kl.de // remember to deallocate it 19212027Sjungma@eit.uni-kl.de m_buffers_to_free.push_back(buffer_ptr); 19312027Sjungma@eit.uni-kl.de } 19412027Sjungma@eit.uni-kl.de // Connect it to the two switches 19512027Sjungma@eit.uni-kl.de SimpleIntLink *simple_link = safe_cast<SimpleIntLink*>(link); 19612027Sjungma@eit.uni-kl.de 19712027Sjungma@eit.uni-kl.de m_switch_ptr_vector[dest]->addInPort(queues); 19812027Sjungma@eit.uni-kl.de m_switch_ptr_vector[src]->addOutPort(queues, routing_table_entry, 19912027Sjungma@eit.uni-kl.de simple_link->m_latency, 20012027Sjungma@eit.uni-kl.de simple_link->m_bw_multiplier); 20112027Sjungma@eit.uni-kl.de} 20212027Sjungma@eit.uni-kl.de 20312027Sjungma@eit.uni-kl.devoid 20412027Sjungma@eit.uni-kl.deSimpleNetwork::checkNetworkAllocation(NodeID id, bool ordered, int network_num) 20512027Sjungma@eit.uni-kl.de{ 20612027Sjungma@eit.uni-kl.de assert(id < m_nodes); 20712027Sjungma@eit.uni-kl.de assert(network_num < m_virtual_networks); 20812027Sjungma@eit.uni-kl.de 20912027Sjungma@eit.uni-kl.de if (ordered) { 21012027Sjungma@eit.uni-kl.de m_ordered[network_num] = true; 21112027Sjungma@eit.uni-kl.de } 21212027Sjungma@eit.uni-kl.de m_in_use[network_num] = true; 21312027Sjungma@eit.uni-kl.de} 21412027Sjungma@eit.uni-kl.de 21512027Sjungma@eit.uni-kl.deMessageBuffer* 21612027Sjungma@eit.uni-kl.deSimpleNetwork::getToNetQueue(NodeID id, bool ordered, int network_num, 21712027Sjungma@eit.uni-kl.de std::string vnet_type) 21812027Sjungma@eit.uni-kl.de{ 21912027Sjungma@eit.uni-kl.de checkNetworkAllocation(id, ordered, network_num); 22012027Sjungma@eit.uni-kl.de return m_toNetQueues[id][network_num]; 22112027Sjungma@eit.uni-kl.de} 22212027Sjungma@eit.uni-kl.de 22312027Sjungma@eit.uni-kl.deMessageBuffer* 22412027Sjungma@eit.uni-kl.deSimpleNetwork::getFromNetQueue(NodeID id, bool ordered, int network_num, 22512027Sjungma@eit.uni-kl.de std::string vnet_type) 22612027Sjungma@eit.uni-kl.de{ 22712027Sjungma@eit.uni-kl.de checkNetworkAllocation(id, ordered, network_num); 22812027Sjungma@eit.uni-kl.de return m_fromNetQueues[id][network_num]; 22912027Sjungma@eit.uni-kl.de} 23012027Sjungma@eit.uni-kl.de 23112027Sjungma@eit.uni-kl.deconst std::vector<Throttle*>* 23212027Sjungma@eit.uni-kl.deSimpleNetwork::getThrottles(NodeID id) const 23312027Sjungma@eit.uni-kl.de{ 23412027Sjungma@eit.uni-kl.de assert(id >= 0); 23512027Sjungma@eit.uni-kl.de assert(id < m_nodes); 23612027Sjungma@eit.uni-kl.de assert(m_endpoint_switches[id] != NULL); 23712027Sjungma@eit.uni-kl.de return m_endpoint_switches[id]->getThrottles(); 23812027Sjungma@eit.uni-kl.de} 23912027Sjungma@eit.uni-kl.de 24012027Sjungma@eit.uni-kl.devoid 24112027Sjungma@eit.uni-kl.deSimpleNetwork::printStats(ostream& out) const 24212027Sjungma@eit.uni-kl.de{ 24312027Sjungma@eit.uni-kl.de out << endl; 24412027Sjungma@eit.uni-kl.de out << "Network Stats" << endl; 24512027Sjungma@eit.uni-kl.de out << "-------------" << endl; 24612027Sjungma@eit.uni-kl.de out << endl; 24712027Sjungma@eit.uni-kl.de 24812027Sjungma@eit.uni-kl.de // 24912027Sjungma@eit.uni-kl.de // Determine total counts before printing out each switch's stats 25012027Sjungma@eit.uni-kl.de // 25112027Sjungma@eit.uni-kl.de std::vector<uint64> total_msg_counts; 25212027Sjungma@eit.uni-kl.de total_msg_counts.resize(MessageSizeType_NUM); 25312027Sjungma@eit.uni-kl.de for (MessageSizeType type = MessageSizeType_FIRST; 25412027Sjungma@eit.uni-kl.de type < MessageSizeType_NUM; 25512027Sjungma@eit.uni-kl.de ++type) { 25612027Sjungma@eit.uni-kl.de total_msg_counts[type] = 0; 25712027Sjungma@eit.uni-kl.de } 25812027Sjungma@eit.uni-kl.de 25912027Sjungma@eit.uni-kl.de for (int i = 0; i < m_switch_ptr_vector.size(); i++) { 26012027Sjungma@eit.uni-kl.de const std::vector<Throttle*>* throttles = 26112027Sjungma@eit.uni-kl.de m_switch_ptr_vector[i]->getThrottles(); 26212027Sjungma@eit.uni-kl.de 26312027Sjungma@eit.uni-kl.de for (int p = 0; p < throttles->size(); p++) { 26412027Sjungma@eit.uni-kl.de 26512027Sjungma@eit.uni-kl.de const std::vector<std::vector<int> >& message_counts = 26612027Sjungma@eit.uni-kl.de ((*throttles)[p])->getCounters(); 26712027Sjungma@eit.uni-kl.de 26812027Sjungma@eit.uni-kl.de for (MessageSizeType type = MessageSizeType_FIRST; 26912027Sjungma@eit.uni-kl.de type < MessageSizeType_NUM; 27012027Sjungma@eit.uni-kl.de ++type) { 27112027Sjungma@eit.uni-kl.de 27212027Sjungma@eit.uni-kl.de const std::vector<int> &mct = message_counts[type]; 27312027Sjungma@eit.uni-kl.de int sum = accumulate(mct.begin(), mct.end(), 0); 27412027Sjungma@eit.uni-kl.de total_msg_counts[type] += uint64(sum); 27512027Sjungma@eit.uni-kl.de } 27612027Sjungma@eit.uni-kl.de } 27712027Sjungma@eit.uni-kl.de } 27812027Sjungma@eit.uni-kl.de uint64 total_msgs = 0; 27912027Sjungma@eit.uni-kl.de uint64 total_bytes = 0; 28012027Sjungma@eit.uni-kl.de for (MessageSizeType type = MessageSizeType_FIRST; 28112027Sjungma@eit.uni-kl.de type < MessageSizeType_NUM; 28212027Sjungma@eit.uni-kl.de ++type) { 28312027Sjungma@eit.uni-kl.de 28412027Sjungma@eit.uni-kl.de if (total_msg_counts[type] > 0) { 28512027Sjungma@eit.uni-kl.de out << "total_msg_count_" << type << ": " << total_msg_counts[type] 28612027Sjungma@eit.uni-kl.de << " " << total_msg_counts[type] * 28712027Sjungma@eit.uni-kl.de uint64(RubySystem::getNetwork()->MessageSizeType_to_int(type)) 28812027Sjungma@eit.uni-kl.de << endl; 28912027Sjungma@eit.uni-kl.de 29012027Sjungma@eit.uni-kl.de total_msgs += total_msg_counts[type]; 29112027Sjungma@eit.uni-kl.de 29212027Sjungma@eit.uni-kl.de total_bytes += total_msg_counts[type] * 29312027Sjungma@eit.uni-kl.de uint64(RubySystem::getNetwork()->MessageSizeType_to_int(type)); 29412027Sjungma@eit.uni-kl.de 29512027Sjungma@eit.uni-kl.de } 29612027Sjungma@eit.uni-kl.de } 29712027Sjungma@eit.uni-kl.de 29812027Sjungma@eit.uni-kl.de out << "total_msgs: " << total_msgs 29912027Sjungma@eit.uni-kl.de << " total_bytes: " << total_bytes << endl; 30012027Sjungma@eit.uni-kl.de 30112027Sjungma@eit.uni-kl.de out << endl; 30212027Sjungma@eit.uni-kl.de for (int i = 0; i < m_switch_ptr_vector.size(); i++) { 30312027Sjungma@eit.uni-kl.de m_switch_ptr_vector[i]->printStats(out); 30412027Sjungma@eit.uni-kl.de } 30512027Sjungma@eit.uni-kl.de m_topology_ptr->printStats(out); 30612027Sjungma@eit.uni-kl.de} 30712027Sjungma@eit.uni-kl.de 30812027Sjungma@eit.uni-kl.devoid 30912027Sjungma@eit.uni-kl.deSimpleNetwork::clearStats() 31012027Sjungma@eit.uni-kl.de{ 31112027Sjungma@eit.uni-kl.de for (int i = 0; i < m_switch_ptr_vector.size(); i++) { 31212027Sjungma@eit.uni-kl.de m_switch_ptr_vector[i]->clearStats(); 31312027Sjungma@eit.uni-kl.de } 31412027Sjungma@eit.uni-kl.de m_topology_ptr->clearStats(); 31512027Sjungma@eit.uni-kl.de} 31612027Sjungma@eit.uni-kl.de 31712027Sjungma@eit.uni-kl.devoid 31812027Sjungma@eit.uni-kl.deSimpleNetwork::printConfig(ostream& out) const 31912027Sjungma@eit.uni-kl.de{ 32012027Sjungma@eit.uni-kl.de out << endl; 32112027Sjungma@eit.uni-kl.de out << "Network Configuration" << endl; 32212027Sjungma@eit.uni-kl.de out << "---------------------" << endl; 32312027Sjungma@eit.uni-kl.de out << "network: SIMPLE_NETWORK" << endl; 32412027Sjungma@eit.uni-kl.de out << "topology: " << m_topology_ptr->getName() << endl; 32512027Sjungma@eit.uni-kl.de out << endl; 32612027Sjungma@eit.uni-kl.de 32712027Sjungma@eit.uni-kl.de for (int i = 0; i < m_virtual_networks; i++) { 32812027Sjungma@eit.uni-kl.de out << "virtual_net_" << i << ": "; 32912027Sjungma@eit.uni-kl.de if (m_in_use[i]) { 33012027Sjungma@eit.uni-kl.de out << "active, "; 33112027Sjungma@eit.uni-kl.de if (m_ordered[i]) { 33212027Sjungma@eit.uni-kl.de out << "ordered" << endl; 33312027Sjungma@eit.uni-kl.de } else { 33412027Sjungma@eit.uni-kl.de out << "unordered" << endl; 33512027Sjungma@eit.uni-kl.de } 33612027Sjungma@eit.uni-kl.de } else { 33712027Sjungma@eit.uni-kl.de out << "inactive" << endl; 33812027Sjungma@eit.uni-kl.de } 33912027Sjungma@eit.uni-kl.de } 34012027Sjungma@eit.uni-kl.de out << endl; 34112027Sjungma@eit.uni-kl.de 34212027Sjungma@eit.uni-kl.de for(int i = 0; i < m_switch_ptr_vector.size(); i++) { 34312027Sjungma@eit.uni-kl.de m_switch_ptr_vector[i]->printConfig(out); 34412027Sjungma@eit.uni-kl.de } 34512027Sjungma@eit.uni-kl.de 34612027Sjungma@eit.uni-kl.de m_topology_ptr->printConfig(out); 34712027Sjungma@eit.uni-kl.de} 34812027Sjungma@eit.uni-kl.de 34912027Sjungma@eit.uni-kl.devoid 35012027Sjungma@eit.uni-kl.deSimpleNetwork::print(ostream& out) const 35112027Sjungma@eit.uni-kl.de{ 35212027Sjungma@eit.uni-kl.de out << "[SimpleNetwork]"; 35312027Sjungma@eit.uni-kl.de} 35412027Sjungma@eit.uni-kl.de 35512027Sjungma@eit.uni-kl.de 35612027Sjungma@eit.uni-kl.deSimpleNetwork * 35712027Sjungma@eit.uni-kl.deSimpleNetworkParams::create() 35812027Sjungma@eit.uni-kl.de{ 35912027Sjungma@eit.uni-kl.de return new SimpleNetwork(this); 36012027Sjungma@eit.uni-kl.de} 36112027Sjungma@eit.uni-kl.de