mem-ruby: Fixed pipeline squashes caused by aliased requests
authorJoe Gross <joseph.gross@amd.com>
Mon, 20 Jul 2015 14:15:18 +0000 (09:15 -0500)
committerAnthony Gutierrez <anthony.gutierrez@amd.com>
Thu, 31 Oct 2019 18:42:04 +0000 (18:42 +0000)
commitbb94296373dde1d0ce971ee58ad111f4225c425e
tree107f689b6450a1c986eacfa36412dbdfe1635551
parent0125bf80b514c6745ea985b3b13116b42cc0548f
mem-ruby: Fixed pipeline squashes caused by aliased requests

This patch was created by Bihn Pham during his internship at AMD.

This patch fixes a very significant performance bug when using the O3
CPU model and Ruby. The issue was Ruby returned false when it received
a request to the same address that already has an outstanding request or
when the memory is blocked. As a result, O3 unnecessary squashed the
pipeline and re-executed instructions. This fix merges readRequestTable
and writeRequestTable in Sequencer into a single request table that
keeps track of all requests and allows multiple outstanding requests to
the same address. This prevents O3 from squashing the pipeline.

Change-Id: If934d57b4736861e342de0ab18be4feec464273d
Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/21219
Reviewed-by: Anthony Gutierrez <anthony.gutierrez@amd.com>
Maintainer: Anthony Gutierrez <anthony.gutierrez@amd.com>
Tested-by: kokoro <noreply+kokoro@google.com>
src/mem/ruby/system/Sequencer.cc
src/mem/ruby/system/Sequencer.hh
tests/gem5/learning_gem5/ref/test