SimpleNetwork.cc (10303:71e0934af9f1) SimpleNetwork.cc (10311:ad9c042dce54)
1/*
2 * Copyright (c) 1999-2008 Mark D. Hill and David A. Wood
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are
7 * met: redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer;

--- 79 unchanged lines hidden (view full) ---

88 const NetDest& routing_table_entry)
89{
90 assert(dest < m_nodes);
91 assert(src < m_switches.size());
92 assert(m_switches[src] != NULL);
93
94 SimpleExtLink *simple_link = safe_cast<SimpleExtLink*>(link);
95
1/*
2 * Copyright (c) 1999-2008 Mark D. Hill and David A. Wood
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are
7 * met: redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer;

--- 79 unchanged lines hidden (view full) ---

88 const NetDest& routing_table_entry)
89{
90 assert(dest < m_nodes);
91 assert(src < m_switches.size());
92 assert(m_switches[src] != NULL);
93
94 SimpleExtLink *simple_link = safe_cast<SimpleExtLink*>(link);
95
96 m_switches[src]->addOutPort(m_fromNetQueues[dest],
97 routing_table_entry,
98 simple_link->m_latency,
99 simple_link->m_bw_multiplier);
96 m_switches[src]->addOutPort(m_fromNetQueues[dest], routing_table_entry,
97 simple_link->m_latency,
98 simple_link->m_bw_multiplier);
100
101 m_endpoint_switches[dest] = m_switches[src];
102}
103
104// From an endpoint node to a switch
105void
106SimpleNetwork::makeInLink(NodeID src, SwitchID dest, BasicLink* link,
107 LinkDirection direction,

--- 5 unchanged lines hidden (view full) ---

113
114// From a switch to a switch
115void
116SimpleNetwork::makeInternalLink(SwitchID src, SwitchID dest, BasicLink* link,
117 LinkDirection direction,
118 const NetDest& routing_table_entry)
119{
120 // Create a set of new MessageBuffers
99
100 m_endpoint_switches[dest] = m_switches[src];
101}
102
103// From an endpoint node to a switch
104void
105SimpleNetwork::makeInLink(NodeID src, SwitchID dest, BasicLink* link,
106 LinkDirection direction,

--- 5 unchanged lines hidden (view full) ---

112
113// From a switch to a switch
114void
115SimpleNetwork::makeInternalLink(SwitchID src, SwitchID dest, BasicLink* link,
116 LinkDirection direction,
117 const NetDest& routing_table_entry)
118{
119 // Create a set of new MessageBuffers
121 std::vector<MessageBuffer*> queues;
120 std::map<int, MessageBuffer*> queues;
122 for (int i = 0; i < m_virtual_networks; i++) {
123 // allocate a buffer
124 MessageBuffer* buffer_ptr = new MessageBuffer;
125 buffer_ptr->setOrdering(true);
121 for (int i = 0; i < m_virtual_networks; i++) {
122 // allocate a buffer
123 MessageBuffer* buffer_ptr = new MessageBuffer;
124 buffer_ptr->setOrdering(true);
125
126 if (m_buffer_size > 0) {
127 buffer_ptr->resize(m_buffer_size);
128 }
126 if (m_buffer_size > 0) {
127 buffer_ptr->resize(m_buffer_size);
128 }
129 queues.push_back(buffer_ptr);
129
130 queues[i] = buffer_ptr;
130 // remember to deallocate it
131 m_buffers_to_free.push_back(buffer_ptr);
132 }
131 // remember to deallocate it
132 m_buffers_to_free.push_back(buffer_ptr);
133 }
134
133 // Connect it to the two switches
134 SimpleIntLink *simple_link = safe_cast<SimpleIntLink*>(link);
135
136 m_switches[dest]->addInPort(queues);
137 m_switches[src]->addOutPort(queues, routing_table_entry,
135 // Connect it to the two switches
136 SimpleIntLink *simple_link = safe_cast<SimpleIntLink*>(link);
137
138 m_switches[dest]->addInPort(queues);
139 m_switches[src]->addOutPort(queues, routing_table_entry,
138 simple_link->m_latency,
139 simple_link->m_bw_multiplier);
140 simple_link->m_latency,
141 simple_link->m_bw_multiplier);
140}
141
142void
143SimpleNetwork::checkNetworkAllocation(NodeID id, bool ordered, int network_num)
144{
145 assert(id < m_nodes);
146 assert(network_num < m_virtual_networks);
147
148 if (ordered) {
149 m_ordered[network_num] = true;
150 }
151 m_in_use[network_num] = true;
152}
153
142}
143
144void
145SimpleNetwork::checkNetworkAllocation(NodeID id, bool ordered, int network_num)
146{
147 assert(id < m_nodes);
148 assert(network_num < m_virtual_networks);
149
150 if (ordered) {
151 m_ordered[network_num] = true;
152 }
153 m_in_use[network_num] = true;
154}
155
154MessageBuffer*
155SimpleNetwork::getToNetQueue(NodeID id, bool ordered, int network_num,
156 std::string vnet_type)
156void
157SimpleNetwork::setToNetQueue(NodeID id, bool ordered, int network_num,
158 std::string vnet_type, MessageBuffer *b)
157{
158 checkNetworkAllocation(id, ordered, network_num);
159{
160 checkNetworkAllocation(id, ordered, network_num);
159 return m_toNetQueues[id][network_num];
161 m_toNetQueues[id][network_num] = b;
160}
161
162}
163
162MessageBuffer*
163SimpleNetwork::getFromNetQueue(NodeID id, bool ordered, int network_num,
164 std::string vnet_type)
164void
165SimpleNetwork::setFromNetQueue(NodeID id, bool ordered, int network_num,
166 std::string vnet_type, MessageBuffer *b)
165{
166 checkNetworkAllocation(id, ordered, network_num);
167{
168 checkNetworkAllocation(id, ordered, network_num);
167 return m_fromNetQueues[id][network_num];
169 m_fromNetQueues[id][network_num] = b;
168}
169
170void
171SimpleNetwork::regStats()
172{
173 for (MessageSizeType type = MessageSizeType_FIRST;
174 type < MessageSizeType_NUM; ++type) {
175 m_msg_counts[(unsigned int) type]

--- 77 unchanged lines hidden ---
170}
171
172void
173SimpleNetwork::regStats()
174{
175 for (MessageSizeType type = MessageSizeType_FIRST;
176 type < MessageSizeType_NUM; ++type) {
177 m_msg_counts[(unsigned int) type]

--- 77 unchanged lines hidden ---