From 69d31fcda599d82e9bcf5970bdecbc181388e5ef Mon Sep 17 00:00:00 2001 From: Dongdong Li Date: Thu, 22 Aug 2013 20:28:46 -0800 Subject: Refactoring: 1. Decouple the constructor of interconnect interface 2. Some type changed to unsigned from int Fixed Bug: wrong variable in InterconnectInterface::Busy() Review: 83001 [git-p4: depot-paths = "//depot/gpgpu_sim_research/fermi/distribution/": change = 16877] --- src/intersim2/interconnect_interface.cpp | 105 +++++++++++++++++-------------- 1 file changed, 59 insertions(+), 46 deletions(-) (limited to 'src/intersim2/interconnect_interface.cpp') diff --git a/src/intersim2/interconnect_interface.cpp b/src/intersim2/interconnect_interface.cpp index 338e82e..eecf96e 100644 --- a/src/intersim2/interconnect_interface.cpp +++ b/src/intersim2/interconnect_interface.cpp @@ -43,15 +43,44 @@ #include "intersim_config.hpp" #include "network.hpp" -InterconnectInterface::InterconnectInterface(const char* const config_file, unsigned int n_shader, unsigned int n_mem) -:_n_shader(n_shader), _n_mem(n_mem) +InterconnectInterface* InterconnectInterface::New(const char* const config_file) { if (! config_file ) { cout << "Interconnect Requires a configfile" << endl; exit (-1); } - _icnt_config = new IntersimConfig(); - _icnt_config->ParseFile(config_file); + InterconnectInterface* icnt_interface = new InterconnectInterface(); + icnt_interface->_icnt_config = new IntersimConfig(); + icnt_interface->_icnt_config->ParseFile(config_file); + + return icnt_interface; +} + +InterconnectInterface::InterconnectInterface() +{ + +} + +InterconnectInterface::~InterconnectInterface() +{ + for (int i=0; i<_subnets; ++i) { + ///Power analysis + if(_icnt_config->GetInt("sim_power") > 0){ + Power_Module pnet(_net[i], *_icnt_config); + pnet.run(); + } + delete _net[i]; + } + + delete _traffic_manager; + _traffic_manager = NULL; + delete _icnt_config; +} + +void InterconnectInterface::CreateInterconnect(unsigned n_shader, unsigned n_mem) +{ + _n_shader = n_shader; + _n_mem = n_mem; InitializeRoutingMap(*_icnt_config); @@ -103,23 +132,6 @@ InterconnectInterface::InterconnectInterface(const char* const config_file, uns _CreateBuffer(); _CreateNodeMap(_n_shader, _n_mem, _traffic_manager->_nodes, _icnt_config->GetInt("use_map")); - -} - -InterconnectInterface::~InterconnectInterface() -{ - for (int i=0; i<_subnets; ++i) { - ///Power analysis - if(_icnt_config->GetInt("sim_power") > 0){ - Power_Module pnet(_net[i], *_icnt_config); - pnet.run(); - } - delete _net[i]; - } - - delete _traffic_manager; - _traffic_manager = NULL; - delete _icnt_config; } void InterconnectInterface::Init() @@ -145,13 +157,14 @@ void InterconnectInterface::Push(unsigned input_deviceID, unsigned output_device if (_subnets == 1) { subnet = 0; } else { - if (int(input_deviceID) < _n_shader ) { + if (input_deviceID < _n_shader ) { subnet = 0; } else { subnet = 1; } } + //TODO: Remove mem_fetch to reduce dependency Flit::FlitType packet_type; mem_fetch* mf = static_cast(data); @@ -209,10 +222,10 @@ void InterconnectInterface::Advance() bool InterconnectInterface::Busy() const { - bool busy = !_traffic_manager->_measured_in_flight_flits[0].empty(); + bool busy = !_traffic_manager->_total_in_flight_flits[0].empty(); if (!busy) { for (int s = 0; s < _subnets; ++s) { - for (int n = 0; n < _n_shader+_n_mem; ++n) { + for (unsigned n = 0; n < _n_shader+_n_mem; ++n) { //FIXME: if this cannot make sure _partial_packets is empty assert(_traffic_manager->_input_queue[s][n][0].empty()); } @@ -221,7 +234,7 @@ bool InterconnectInterface::Busy() const else return true; for (int s = 0; s < _subnets; ++s) { - for (int n=0; n < (_n_shader+_n_mem); ++n) { + for (unsigned n=0; n < (_n_shader+_n_mem); ++n) { for (int vc=0; vc<_vcs; ++vc) { if (_boundary_buffer[s][n][vc].HasPacket() ) { return true; @@ -240,7 +253,7 @@ bool InterconnectInterface::HasBuffer(unsigned deviceID, unsigned int size) cons has_buffer = _traffic_manager->_input_queue[0][icntID][0].size() +n_flits <= _input_buffer_capacity; - if ((_subnets>1) && int(deviceID) >= _n_shader) // deviceID is memory node + if ((_subnets>1) && deviceID >= _n_shader) // deviceID is memory node has_buffer = _traffic_manager->_input_queue[1][icntID][0].size() +n_flits <= _input_buffer_capacity; return has_buffer; @@ -346,7 +359,7 @@ Flit* InterconnectInterface::GetEjectedFlit(int subnet, int node) void InterconnectInterface::_CreateBuffer() { - int nodes = _n_shader + _n_mem; + unsigned nodes = _n_shader + _n_mem; _boundary_buffer.resize(_subnets); _ejection_buffer.resize(_subnets); @@ -359,52 +372,52 @@ void InterconnectInterface::_CreateBuffer() _round_robin_turn[subnet].resize(nodes); _ejected_flit_queue[subnet].resize(nodes); - for (int node=0;node > preset_memory_map; + map > preset_memory_map; // good for 8 shaders and 8 memory cores { - int memory_node[] = {1, 3, 4, 6, 9, 11, 12, 14}; - preset_memory_map[16] = vector(memory_node, memory_node+8); + unsigned memory_node[] = {1, 3, 4, 6, 9, 11, 12, 14}; + preset_memory_map[16] = vector(memory_node, memory_node+8); } // good for 28 shaders and 8 memory cores { - int memory_node[] = {3, 7, 10, 12, 23, 25, 28, 32}; - preset_memory_map[36] = vector(memory_node, memory_node+8); + unsigned memory_node[] = {3, 7, 10, 12, 23, 25, 28, 32}; + preset_memory_map[36] = vector(memory_node, memory_node+8); } // good for 56 shaders and 8 memory cores { - int memory_node[] = {3, 15, 17, 29, 36, 47, 49, 61}; - preset_memory_map[64] = vector(memory_node, memory_node+sizeof(memory_node)/sizeof(int)); + unsigned memory_node[] = {3, 15, 17, 29, 36, 47, 49, 61}; + preset_memory_map[64] = vector(memory_node, memory_node+sizeof(memory_node)/sizeof(unsigned)); } // good for 110 shaders and 11 memory cores { - int memory_node[] = {12, 20, 25, 28, 57, 60, 63, 92, 95,100,108}; - preset_memory_map[121] = vector(memory_node, memory_node+sizeof(memory_node)/sizeof(int)); + unsigned memory_node[] = {12, 20, 25, 28, 57, 60, 63, 92, 95,100,108}; + preset_memory_map[121] = vector(memory_node, memory_node+sizeof(memory_node)/sizeof(unsigned)); } - const vector &memory_node = preset_memory_map[n_node]; + const vector &memory_node = preset_memory_map[n_node]; if (memory_node.empty()) { cerr<<"ERROR!!! NO MAPPING IMPLEMENTED YET FOR THIS CONFIG"<