From 4034d20763c1197b854eafc94ad96adf42f556a5 Mon Sep 17 00:00:00 2001 From: Nic McDonald Date: Tue, 16 Nov 2021 11:00:03 -0700 Subject: [PATCH] Force store-n-forward for OQ router --- config/dragonfly_oq_stream_stream_stream.json | 2 +- config/hyperx_oq_alltoall.json | 2 +- config/singlerouter_oq_blast.json | 2 +- config/singlerouter_oq_blast_blast.json | 2 +- src/router/outputqueued/InputQueue.cc | 1 - src/router/outputqueued/Router.cc | 5 +++++ 6 files changed, 9 insertions(+), 5 deletions(-) diff --git a/config/dragonfly_oq_stream_stream_stream.json b/config/dragonfly_oq_stream_stream_stream.json index 1c8863d..42d409a 100644 --- a/config/dragonfly_oq_stream_stream_stream.json +++ b/config/dragonfly_oq_stream_stream_stream.json @@ -108,7 +108,7 @@ "congestion_mode": "output", "input_queue_mode": "fixed", "input_queue_depth": 64, - "store_and_forward": false, + "store_and_forward": true, "transfer_latency": 25, "output_queue_depth": "infinite", "crossbar": { diff --git a/config/hyperx_oq_alltoall.json b/config/hyperx_oq_alltoall.json index aa19a0f..2da89e8 100644 --- a/config/hyperx_oq_alltoall.json +++ b/config/hyperx_oq_alltoall.json @@ -89,7 +89,7 @@ "input_queue_depth": 5, "input_queue_max": 32, "input_queue_min": 16, - "store_and_forward": false, + "store_and_forward": true, "transfer_latency": 1, "output_queue_depth": 16, "output_crossbar": { diff --git a/config/singlerouter_oq_blast.json b/config/singlerouter_oq_blast.json index 8a6121b..e4274f5 100644 --- a/config/singlerouter_oq_blast.json +++ b/config/singlerouter_oq_blast.json @@ -52,7 +52,7 @@ "congestion_mode": "downstream", "input_queue_mode": "fixed", "input_queue_depth": 64, - "store_and_forward": false, + "store_and_forward": true, "transfer_latency": 100, "output_queue_depth": "infinite", "output_crossbar": { diff --git a/config/singlerouter_oq_blast_blast.json b/config/singlerouter_oq_blast_blast.json index a8c91c4..7a54f23 100644 --- a/config/singlerouter_oq_blast_blast.json +++ b/config/singlerouter_oq_blast_blast.json @@ -52,7 +52,7 @@ "congestion_mode": "downstream", "input_queue_mode": "fixed", "input_queue_depth": 64, - "store_and_forward": false, + "store_and_forward": true, "transfer_latency": 100, "output_queue_depth": "infinite", "output_crossbar": { diff --git a/src/router/outputqueued/InputQueue.cc b/src/router/outputqueued/InputQueue.cc index de0b943..3a79cc3 100644 --- a/src/router/outputqueued/InputQueue.cc +++ b/src/router/outputqueued/InputQueue.cc @@ -196,7 +196,6 @@ void InputQueue::processPipeline() { router_->sendCredit(port_, vc_); // put it in the routing pipeline stage - assert(rfe_.flit == nullptr); rfe_.flit = flit; // set state as ready to request routing algorithm diff --git a/src/router/outputqueued/Router.cc b/src/router/outputqueued/Router.cc index 6ae1f91..16cd04f 100644 --- a/src/router/outputqueued/Router.cc +++ b/src/router/outputqueued/Router.cc @@ -106,6 +106,11 @@ Router::Router(const std::string& _name, const Component* _parent, // determine if the router will use store and forward assert(_settings.contains("store_and_forward")); bool storeAndForward = _settings["store_and_forward"].get(); + assert(storeAndForward); + /* There is a problem if this is not enabled. The flits could still be on the + incoming wire when they also get transferred to the output side. The + channel utilization per VC is wrong in this case. In theory this could + cause other issues for very long packets. */ // create routing algorithms, input queues, link to routing algorithm, // crossbar, and schedulers