changeset 2c094ad4dc70 in /z/repo/gem5
details: http://repo.gem5.org/gem5?cmd=changeset;node=2c094ad4dc70
description:
ruby: garnet: fixed: implement functional access
diffstat:
configs/ruby/Ruby.py | 4 +-
src/mem/ruby/network/garnet/fixed-pipeline/GarnetNetwork_d.cc | 20
++++++++++
src/mem/ruby/network/garnet/fixed-pipeline/GarnetNetwork_d.hh | 4 ++
src/mem/ruby/network/garnet/fixed-pipeline/InputUnit_d.cc | 11 +++++
src/mem/ruby/network/garnet/fixed-pipeline/InputUnit_d.hh | 2 +
src/mem/ruby/network/garnet/fixed-pipeline/NetworkInterface_d.cc | 12 ++++++
src/mem/ruby/network/garnet/fixed-pipeline/NetworkInterface_d.hh | 2 +
src/mem/ruby/network/garnet/fixed-pipeline/NetworkLink_d.cc | 6 +++
src/mem/ruby/network/garnet/fixed-pipeline/NetworkLink_d.hh | 8 ++--
src/mem/ruby/network/garnet/fixed-pipeline/OutputUnit_d.cc | 6 +++
src/mem/ruby/network/garnet/fixed-pipeline/OutputUnit_d.hh | 2 +
src/mem/ruby/network/garnet/fixed-pipeline/Router_d.cc | 17 ++++++++
src/mem/ruby/network/garnet/fixed-pipeline/Router_d.hh | 2 +
src/mem/ruby/network/garnet/fixed-pipeline/Switch_d.cc | 12 ++++++
src/mem/ruby/network/garnet/fixed-pipeline/Switch_d.hh | 15 ++-----
src/mem/ruby/network/garnet/fixed-pipeline/VirtualChannel_d.cc | 6 +++
src/mem/ruby/network/garnet/fixed-pipeline/VirtualChannel_d.hh | 2 +
src/mem/ruby/network/garnet/fixed-pipeline/flitBuffer_d.cc | 14 +++++++
src/mem/ruby/network/garnet/fixed-pipeline/flitBuffer_d.hh | 2 +
src/mem/ruby/network/garnet/fixed-pipeline/flit_d.cc | 7 +++
src/mem/ruby/network/garnet/fixed-pipeline/flit_d.hh | 8 +--
21 files changed, 141 insertions(+), 21 deletions(-)
diffs (truncated from 355 to 300 lines):
diff -r 6c4d6fdf3644 -r 2c094ad4dc70 configs/ruby/Ruby.py
--- a/configs/ruby/Ruby.py Mon Mar 04 23:33:47 2013 -0500
+++ b/configs/ruby/Ruby.py Wed Mar 06 21:53:16 2013 -0600
@@ -53,8 +53,8 @@
help="check src/mem/ruby/network/topologies for complete set")
parser.add_option("--mesh-rows", type="int", default=1,
help="the number of rows in the mesh topology")
- parser.add_option("--garnet-network", type="string", default=None,
- help="'fixed'|'flexible'")
+ parser.add_option("--garnet-network", type="choice",
+ choices=['fixed', 'flexible'], help="'fixed'|'flexible'")
parser.add_option("--network-fault-model", action="store_true",
default=False,
help="enable network fault model: see
src/mem/ruby/network/fault_model/")
diff -r 6c4d6fdf3644 -r 2c094ad4dc70
src/mem/ruby/network/garnet/fixed-pipeline/GarnetNetwork_d.cc
--- a/src/mem/ruby/network/garnet/fixed-pipeline/GarnetNetwork_d.cc Mon Mar
04 23:33:47 2013 -0500
+++ b/src/mem/ruby/network/garnet/fixed-pipeline/GarnetNetwork_d.cc Wed Mar
06 21:53:16 2013 -0600
@@ -346,3 +346,23 @@
{
return new GarnetNetwork_d(this);
}
+
+uint32_t
+GarnetNetwork_d::functionalWrite(Packet *pkt)
+{
+ uint32_t num_functional_writes = 0;
+
+ for (unsigned int i = 0; i < m_router_ptr_vector.size(); i++) {
+ num_functional_writes += m_router_ptr_vector[i]->functionalWrite(pkt);
+ }
+
+ for (unsigned int i = 0; i < m_ni_ptr_vector.size(); ++i) {
+ num_functional_writes += m_ni_ptr_vector[i]->functionalWrite(pkt);
+ }
+
+ for (unsigned int i = 0; i < m_link_ptr_vector.size(); ++i) {
+ num_functional_writes += m_link_ptr_vector[i]->functionalWrite(pkt);
+ }
+
+ return num_functional_writes;
+}
diff -r 6c4d6fdf3644 -r 2c094ad4dc70
src/mem/ruby/network/garnet/fixed-pipeline/GarnetNetwork_d.hh
--- a/src/mem/ruby/network/garnet/fixed-pipeline/GarnetNetwork_d.hh Mon Mar
04 23:33:47 2013 -0500
+++ b/src/mem/ruby/network/garnet/fixed-pipeline/GarnetNetwork_d.hh Wed Mar
06 21:53:16 2013 -0600
@@ -90,6 +90,10 @@
const NetDest& routing_table_entry,
bool isReconfiguration);
+ //! Function for performing a functional write. The return value
+ //! indicates the number of messages that were written.
+ uint32_t functionalWrite(Packet *pkt);
+
private:
void checkNetworkAllocation(NodeID id, bool ordered, int network_num,
std::string vnet_type);
diff -r 6c4d6fdf3644 -r 2c094ad4dc70
src/mem/ruby/network/garnet/fixed-pipeline/InputUnit_d.cc
--- a/src/mem/ruby/network/garnet/fixed-pipeline/InputUnit_d.cc Mon Mar 04
23:33:47 2013 -0500
+++ b/src/mem/ruby/network/garnet/fixed-pipeline/InputUnit_d.cc Wed Mar 06
21:53:16 2013 -0600
@@ -94,3 +94,14 @@
m_num_buffer_reads[vnet]++;
}
}
+
+uint32_t
+InputUnit_d::functionalWrite(Packet *pkt)
+{
+ uint32_t num_functional_writes = 0;
+ for (int i=0; i < m_num_vcs; i++) {
+ num_functional_writes += m_vcs[i]->functionalWrite(pkt);
+ }
+
+ return num_functional_writes;
+}
diff -r 6c4d6fdf3644 -r 2c094ad4dc70
src/mem/ruby/network/garnet/fixed-pipeline/InputUnit_d.hh
--- a/src/mem/ruby/network/garnet/fixed-pipeline/InputUnit_d.hh Mon Mar 04
23:33:47 2013 -0500
+++ b/src/mem/ruby/network/garnet/fixed-pipeline/InputUnit_d.hh Wed Mar 06
21:53:16 2013 -0600
@@ -173,6 +173,8 @@
return m_num_buffer_writes[vnet];
}
+ uint32_t functionalWrite(Packet *pkt);
+
private:
int m_id;
int m_num_vcs;
diff -r 6c4d6fdf3644 -r 2c094ad4dc70
src/mem/ruby/network/garnet/fixed-pipeline/NetworkInterface_d.cc
--- a/src/mem/ruby/network/garnet/fixed-pipeline/NetworkInterface_d.cc Mon Mar
04 23:33:47 2013 -0500
+++ b/src/mem/ruby/network/garnet/fixed-pipeline/NetworkInterface_d.cc Wed Mar
06 21:53:16 2013 -0600
@@ -372,3 +372,15 @@
{
out << "[Network Interface]";
}
+
+uint32_t
+NetworkInterface_d::functionalWrite(Packet *pkt)
+{
+ uint32_t num_functional_writes = 0;
+ for (unsigned int i = 0; i < m_num_vcs; ++i) {
+ num_functional_writes += m_ni_buffers[i]->functionalWrite(pkt);
+ }
+
+ num_functional_writes += outSrcQueue->functionalWrite(pkt);
+ return num_functional_writes;
+}
diff -r 6c4d6fdf3644 -r 2c094ad4dc70
src/mem/ruby/network/garnet/fixed-pipeline/NetworkInterface_d.hh
--- a/src/mem/ruby/network/garnet/fixed-pipeline/NetworkInterface_d.hh Mon Mar
04 23:33:47 2013 -0500
+++ b/src/mem/ruby/network/garnet/fixed-pipeline/NetworkInterface_d.hh Wed Mar
06 21:53:16 2013 -0600
@@ -63,6 +63,8 @@
void print(std::ostream& out) const;
int get_vnet(int vc);
+ uint32_t functionalWrite(Packet *);
+
private:
GarnetNetwork_d *m_net_ptr;
int m_virtual_networks, m_num_vcs, m_vc_per_vnet;
diff -r 6c4d6fdf3644 -r 2c094ad4dc70
src/mem/ruby/network/garnet/fixed-pipeline/NetworkLink_d.cc
--- a/src/mem/ruby/network/garnet/fixed-pipeline/NetworkLink_d.cc Mon Mar
04 23:33:47 2013 -0500
+++ b/src/mem/ruby/network/garnet/fixed-pipeline/NetworkLink_d.cc Wed Mar
06 21:53:16 2013 -0600
@@ -99,3 +99,9 @@
{
return new CreditLink_d(this);
}
+
+uint32_t
+NetworkLink_d::functionalWrite(Packet *pkt)
+{
+ return linkBuffer->functionalWrite(pkt);
+}
diff -r 6c4d6fdf3644 -r 2c094ad4dc70
src/mem/ruby/network/garnet/fixed-pipeline/NetworkLink_d.hh
--- a/src/mem/ruby/network/garnet/fixed-pipeline/NetworkLink_d.hh Mon Mar
04 23:33:47 2013 -0500
+++ b/src/mem/ruby/network/garnet/fixed-pipeline/NetworkLink_d.hh Wed Mar
06 21:53:16 2013 -0600
@@ -64,12 +64,12 @@
inline bool isReady(Cycles curTime)
{ return linkBuffer->isReady(curTime); }
+
inline flit_d* peekLink() { return linkBuffer->peekTopFlit(); }
inline flit_d* consumeLink() { return linkBuffer->getTopFlit(); }
- void init_net_ptr(GarnetNetwork_d* net_ptr)
- {
- m_net_ptr = net_ptr;
- }
+
+ void init_net_ptr(GarnetNetwork_d* net_ptr) { m_net_ptr = net_ptr; }
+ uint32_t functionalWrite(Packet *);
protected:
int m_id;
diff -r 6c4d6fdf3644 -r 2c094ad4dc70
src/mem/ruby/network/garnet/fixed-pipeline/OutputUnit_d.cc
--- a/src/mem/ruby/network/garnet/fixed-pipeline/OutputUnit_d.cc Mon Mar
04 23:33:47 2013 -0500
+++ b/src/mem/ruby/network/garnet/fixed-pipeline/OutputUnit_d.cc Wed Mar
06 21:53:16 2013 -0600
@@ -108,3 +108,9 @@
m_router->update_incredit(in_port, in_vc,
m_outvc_state[vc]->get_credit_count());
}
+
+uint32_t
+OutputUnit_d::functionalWrite(Packet *pkt)
+{
+ return m_out_buffer->functionalWrite(pkt);
+}
diff -r 6c4d6fdf3644 -r 2c094ad4dc70
src/mem/ruby/network/garnet/fixed-pipeline/OutputUnit_d.hh
--- a/src/mem/ruby/network/garnet/fixed-pipeline/OutputUnit_d.hh Mon Mar
04 23:33:47 2013 -0500
+++ b/src/mem/ruby/network/garnet/fixed-pipeline/OutputUnit_d.hh Wed Mar
06 21:53:16 2013 -0600
@@ -87,6 +87,8 @@
m_out_link->scheduleEvent(Cycles(1));
}
+ uint32_t functionalWrite(Packet *pkt);
+
private:
int m_id;
int m_num_vcs;
diff -r 6c4d6fdf3644 -r 2c094ad4dc70
src/mem/ruby/network/garnet/fixed-pipeline/Router_d.cc
--- a/src/mem/ruby/network/garnet/fixed-pipeline/Router_d.cc Mon Mar 04
23:33:47 2013 -0500
+++ b/src/mem/ruby/network/garnet/fixed-pipeline/Router_d.cc Wed Mar 06
21:53:16 2013 -0600
@@ -204,6 +204,23 @@
out << aggregate_fault_prob << endl;
}
+uint32_t
+Router_d::functionalWrite(Packet *pkt)
+{
+ uint32_t num_functional_writes = 0;
+ num_functional_writes += m_switch->functionalWrite(pkt);
+
+ for (uint32_t i = 0; i < m_input_unit.size(); i++) {
+ num_functional_writes += m_input_unit[i]->functionalWrite(pkt);
+ }
+
+ for (uint32_t i = 0; i < m_output_unit.size(); i++) {
+ num_functional_writes += m_output_unit[i]->functionalWrite(pkt);
+ }
+
+ return num_functional_writes;
+}
+
Router_d *
GarnetRouter_dParams::create()
{
diff -r 6c4d6fdf3644 -r 2c094ad4dc70
src/mem/ruby/network/garnet/fixed-pipeline/Router_d.hh
--- a/src/mem/ruby/network/garnet/fixed-pipeline/Router_d.hh Mon Mar 04
23:33:47 2013 -0500
+++ b/src/mem/ruby/network/garnet/fixed-pipeline/Router_d.hh Wed Mar 06
21:53:16 2013 -0600
@@ -105,6 +105,8 @@
aggregate_fault_prob);
}
+ uint32_t functionalWrite(Packet *);
+
private:
int m_virtual_networks, m_num_vcs, m_vc_per_vnet;
GarnetNetwork_d *m_network_ptr;
diff -r 6c4d6fdf3644 -r 2c094ad4dc70
src/mem/ruby/network/garnet/fixed-pipeline/Switch_d.cc
--- a/src/mem/ruby/network/garnet/fixed-pipeline/Switch_d.cc Mon Mar 04
23:33:47 2013 -0500
+++ b/src/mem/ruby/network/garnet/fixed-pipeline/Switch_d.cc Wed Mar 06
21:53:16 2013 -0600
@@ -95,3 +95,15 @@
}
}
}
+
+uint32_t
+Switch_d::functionalWrite(Packet *pkt)
+{
+ uint32_t num_functional_writes = 0;
+
+ for (uint32_t i = 0; i < m_switch_buffer.size(); ++i) {
+ num_functional_writes += m_switch_buffer[i]->functionalWrite(pkt);
+ }
+
+ return num_functional_writes;
+}
diff -r 6c4d6fdf3644 -r 2c094ad4dc70
src/mem/ruby/network/garnet/fixed-pipeline/Switch_d.hh
--- a/src/mem/ruby/network/garnet/fixed-pipeline/Switch_d.hh Mon Mar 04
23:33:47 2013 -0500
+++ b/src/mem/ruby/network/garnet/fixed-pipeline/Switch_d.hh Wed Mar 06
21:53:16 2013 -0600
@@ -51,17 +51,12 @@
void check_for_wakeup();
void print(std::ostream& out) const {};
- inline void
- update_sw_winner(int inport, flit_d *t_flit)
- {
- m_switch_buffer[inport]->insert(t_flit);
- }
+ inline void update_sw_winner(int inport, flit_d *t_flit)
+ { m_switch_buffer[inport]->insert(t_flit); }
- inline double
- get_crossbar_count()
- {
- return m_crossbar_activity;
- }
+ inline double get_crossbar_count() { return m_crossbar_activity; }
+
+ uint32_t functionalWrite(Packet *pkt);
private:
int m_num_vcs;
diff -r 6c4d6fdf3644 -r 2c094ad4dc70
src/mem/ruby/network/garnet/fixed-pipeline/VirtualChannel_d.cc
--- a/src/mem/ruby/network/garnet/fixed-pipeline/VirtualChannel_d.cc Mon Mar
04 23:33:47 2013 -0500
+++ b/src/mem/ruby/network/garnet/fixed-pipeline/VirtualChannel_d.cc Wed Mar
06 21:53:16 2013 -0600
@@ -85,3 +85,9 @@
}
return false;
}
+
+uint32_t
+VirtualChannel_d::functionalWrite(Packet *pkt)
+{
+ return m_input_buffer->functionalWrite(pkt);
+}
diff -r 6c4d6fdf3644 -r 2c094ad4dc70
src/mem/ruby/network/garnet/fixed-pipeline/VirtualChannel_d.hh
--- a/src/mem/ruby/network/garnet/fixed-pipeline/VirtualChannel_d.hh Mon Mar
04 23:33:47 2013 -0500
+++ b/src/mem/ruby/network/garnet/fixed-pipeline/VirtualChannel_d.hh Wed Mar
06 21:53:16 2013 -0600
@@ -87,6 +87,8 @@
return m_input_buffer->getTopFlit();
}
+ uint32_t functionalWrite(Packet *pkt);
+
private:
int m_id;
flitBuffer_d *m_input_buffer;
diff -r 6c4d6fdf3644 -r 2c094ad4dc70
src/mem/ruby/network/garnet/fixed-pipeline/flitBuffer_d.cc
--- a/src/mem/ruby/network/garnet/fixed-pipeline/flitBuffer_d.cc Mon Mar
04 23:33:47 2013 -0500
+++ b/src/mem/ruby/network/garnet/fixed-pipeline/flitBuffer_d.cc Wed Mar
06 21:53:16 2013 -0600
@@ -85,3 +85,17 @@
{
max_size = maximum;
}
+
+uint32_t
+flitBuffer_d::functionalWrite(Packet *pkt)
+{
+ uint32_t num_functional_writes = 0;
+
+ for (unsigned int i = 0; i < m_buffer.size(); ++i) {
+ if (m_buffer[i]->functionalWrite(pkt)) {
+ num_functional_writes++;
+ }
_______________________________________________
gem5-dev mailing list
[email protected]
http://m5sim.org/mailman/listinfo/gem5-dev