summaryrefslogtreecommitdiff
path: root/src/gpgpu-sim/local_interconnect.h
diff options
context:
space:
mode:
authorNick <[email protected]>2019-09-13 07:48:08 -0400
committerNick <[email protected]>2019-09-13 07:48:08 -0400
commit9b1e6dba9f721c772e801abc4851a88aa61929da (patch)
treeed12425be898e85e01e7a3997a9b8d5efba6ef50 /src/gpgpu-sim/local_interconnect.h
parent5c99f0fa58caf45f4d457894413aa11c03afdb7d (diff)
Revert "Add src/gpgpu-sim formatting"
This reverts commit 9c9b1341613e767f306b2b73b5b8a5317b6ee563.
Diffstat (limited to 'src/gpgpu-sim/local_interconnect.h')
-rw-r--r--src/gpgpu-sim/local_interconnect.h167
1 files changed, 88 insertions, 79 deletions
diff --git a/src/gpgpu-sim/local_interconnect.h b/src/gpgpu-sim/local_interconnect.h
index b569c50..a784da8 100644
--- a/src/gpgpu-sim/local_interconnect.h
+++ b/src/gpgpu-sim/local_interconnect.h
@@ -7,16 +7,14 @@
//
// 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
+// 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
+// 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
@@ -30,102 +28,113 @@
#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 Arbiteration_type { NAIVE_RR = 0, iSLIP = 1 };
+enum Interconnect_type {
+ REQ_NET=0,
+ REPLY_NET=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();
- 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);
+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( );
+
- // 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;
+ 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);
- private:
- void iSLIP_Advance();
- void RR_Advance();
+ //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;
- 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;
+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;
- 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);
+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;
- // 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;
+protected:
- protected:
- const inct_config& m_inct_config;
+ const inct_config& m_inct_config;
+
+ unsigned n_shader, n_mem;
+ unsigned n_subnets;
+ vector<xbar_router *> net;
- unsigned n_shader, n_mem;
- unsigned n_subnets;
- vector<xbar_router*> net;
};
#endif
+
+