summaryrefslogtreecommitdiff
path: root/src/gpgpu-sim/local_interconnect.h
diff options
context:
space:
mode:
authorMahmoud <[email protected]>2019-09-16 10:47:08 -0400
committerMahmoud <[email protected]>2019-09-16 10:47:08 -0400
commit0785ce7c9471bf1a0c70500eb60cb293fb5aa2fa (patch)
tree15dcaeaf1b1e0e9e3c04af74e72545854793d244 /src/gpgpu-sim/local_interconnect.h
parent688044e9f7a9aef0a63a9610b496baafd886c556 (diff)
parentdba877b45fe11187d56904bbd169f4e0a5ad0586 (diff)
Merge branch 'dev' of https://github.com/purdue-aalp/gpgpu-sim_distribution into dev-private
Diffstat (limited to 'src/gpgpu-sim/local_interconnect.h')
-rw-r--r--src/gpgpu-sim/local_interconnect.h194
1 files changed, 92 insertions, 102 deletions
diff --git a/src/gpgpu-sim/local_interconnect.h b/src/gpgpu-sim/local_interconnect.h
index a784da8..29cd903 100644
--- a/src/gpgpu-sim/local_interconnect.h
+++ b/src/gpgpu-sim/local_interconnect.h
@@ -7,134 +7,124 @@
//
// Redistributions of source code must retain the above copyright notice, this
// list of conditions and the following disclaimer.
-// Redistributions in binary form must reproduce the above copyright notice, this
-// list of conditions and the following disclaimer in the documentation and/or
-// other materials provided with the distribution.
-// Neither the name of The University of British Columbia nor the names of its
-// contributors may be used to endorse or promote products derived from this
-// software without specific prior written permission.
+// Redistributions in binary form must reproduce the above copyright notice,
+// this list of conditions and the following disclaimer in the documentation
+// and/or other materials provided with the distribution. Neither the name of
+// The University of British Columbia nor the names of its contributors may be
+// used to endorse or promote products derived from this software without
+// specific prior written permission.
//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
-// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
-// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+// POSSIBILITY OF SUCH DAMAGE.
#ifndef _LOCAL_INTERCONNECT_HPP_
#define _LOCAL_INTERCONNECT_HPP_
-#include <vector>
-#include <queue>
#include <iostream>
#include <map>
+#include <queue>
+#include <vector>
using namespace std;
+enum Interconnect_type { REQ_NET = 0, REPLY_NET = 1 };
-enum Interconnect_type {
- REQ_NET=0,
- REPLY_NET=1
-};
-
-enum Arbiteration_type {
- NAIVE_RR=0,
- iSLIP=1
-};
+enum Arbiteration_type { NAIVE_RR = 0, iSLIP = 1 };
-struct inct_config
-{
- //config for local interconnect
- unsigned in_buffer_limit;
- unsigned out_buffer_limit;
- unsigned subnets;
- Arbiteration_type arbiter_algo;
+struct inct_config {
+ // config for local interconnect
+ unsigned in_buffer_limit;
+ unsigned out_buffer_limit;
+ unsigned subnets;
+ Arbiteration_type arbiter_algo;
};
class xbar_router {
+ public:
+ xbar_router(unsigned router_id, enum Interconnect_type m_type,
+ unsigned n_shader, unsigned n_mem, unsigned m_in_buffer_limit,
+ unsigned m_out_buffer_limit, enum Arbiteration_type m_arbit_type);
+ ~xbar_router();
+ void Push(unsigned input_deviceID, unsigned output_deviceID, void* data,
+ unsigned int size);
+ void* Pop(unsigned ouput_deviceID);
+ void Advance();
-public:
- xbar_router(unsigned router_id, enum Interconnect_type m_type, unsigned n_shader, unsigned n_mem, unsigned m_in_buffer_limit, unsigned m_out_buffer_limit, enum Arbiteration_type m_arbit_type);
- ~xbar_router();
- void Push(unsigned input_deviceID, unsigned output_deviceID, void* data, unsigned int size);
- void* Pop(unsigned ouput_deviceID);
- void Advance( );
-
+ bool Busy() const;
+ bool Has_Buffer_In(unsigned input_deviceID, unsigned size,
+ bool update_counter = false);
+ bool Has_Buffer_Out(unsigned output_deviceID, unsigned size);
- bool Busy() const;
- bool Has_Buffer_In(unsigned input_deviceID, unsigned size, bool update_counter=false);
- bool Has_Buffer_Out(unsigned output_deviceID, unsigned size);
+ // some stats
+ unsigned long long cycles;
+ unsigned long long conflicts;
+ unsigned long long out_buffer_full;
+ unsigned long long out_buffer_util;
+ unsigned long long in_buffer_full;
+ unsigned long long in_buffer_util;
+ unsigned long long packets_num;
- //some stats
- unsigned long long cycles;
- unsigned long long conflicts;
- unsigned long long out_buffer_full;
- unsigned long long out_buffer_util;
- unsigned long long in_buffer_full;
- unsigned long long in_buffer_util;
- unsigned long long packets_num;
+ private:
+ void iSLIP_Advance();
+ void RR_Advance();
-private:
- void iSLIP_Advance();
- void RR_Advance();
-
- struct Packet{
- Packet(void* m_data, unsigned m_output_deviceID) {
- data = m_data;
- output_deviceID = m_output_deviceID;
- }
- void* data;
- unsigned output_deviceID;
- };
- vector<queue<Packet> > in_buffers;
- vector<queue<Packet> > out_buffers;
- unsigned _n_shader, _n_mem, total_nodes;
- unsigned in_buffer_limit, out_buffer_limit;
- vector<unsigned> next_node; //used for iSLIP arbit
- unsigned next_node_id; //used for RR arbit
- unsigned m_id;
- enum Interconnect_type router_type;
- unsigned active_in_buffers,active_out_buffers;
- Arbiteration_type arbit_type;
-
- friend class LocalInterconnect;
+ struct Packet {
+ Packet(void* m_data, unsigned m_output_deviceID) {
+ data = m_data;
+ output_deviceID = m_output_deviceID;
+ }
+ void* data;
+ unsigned output_deviceID;
+ };
+ vector<queue<Packet> > in_buffers;
+ vector<queue<Packet> > out_buffers;
+ unsigned _n_shader, _n_mem, total_nodes;
+ unsigned in_buffer_limit, out_buffer_limit;
+ vector<unsigned> next_node; // used for iSLIP arbit
+ unsigned next_node_id; // used for RR arbit
+ unsigned m_id;
+ enum Interconnect_type router_type;
+ unsigned active_in_buffers, active_out_buffers;
+ Arbiteration_type arbit_type;
+ friend class LocalInterconnect;
};
class LocalInterconnect {
-public:
- LocalInterconnect(const struct inct_config& m_localinct_config);
- ~LocalInterconnect();
- static LocalInterconnect* New(const struct inct_config& m_inct_config);
- void CreateInterconnect(unsigned n_shader, unsigned n_mem);
-
- //node side functions
- void Init();
- void Push(unsigned input_deviceID, unsigned output_deviceID, void* data, unsigned int size);
- void* Pop(unsigned ouput_deviceID);
- void Advance();
- bool Busy() const;
- bool HasBuffer(unsigned deviceID, unsigned int size) const;
- void DisplayStats() const;
- void DisplayOverallStats() const;
- unsigned GetFlitSize() const;
-
- void DisplayState(FILE* fp) const;
+ public:
+ LocalInterconnect(const struct inct_config& m_localinct_config);
+ ~LocalInterconnect();
+ static LocalInterconnect* New(const struct inct_config& m_inct_config);
+ void CreateInterconnect(unsigned n_shader, unsigned n_mem);
+ // node side functions
+ void Init();
+ void Push(unsigned input_deviceID, unsigned output_deviceID, void* data,
+ unsigned int size);
+ void* Pop(unsigned ouput_deviceID);
+ void Advance();
+ bool Busy() const;
+ bool HasBuffer(unsigned deviceID, unsigned int size) const;
+ void DisplayStats() const;
+ void DisplayOverallStats() const;
+ unsigned GetFlitSize() const;
-protected:
+ void DisplayState(FILE* fp) const;
- const inct_config& m_inct_config;
-
- unsigned n_shader, n_mem;
- unsigned n_subnets;
- vector<xbar_router *> net;
+ protected:
+ const inct_config& m_inct_config;
+ unsigned n_shader, n_mem;
+ unsigned n_subnets;
+ vector<xbar_router*> net;
};
#endif
-
-