diff options
| author | Wilson Fung <[email protected]> | 2013-02-18 20:37:36 -0800 |
|---|---|---|
| committer | Andrew Boktor <[email protected]> | 2014-08-14 13:50:05 -0700 |
| commit | a37b03ced9c3f2a1ea832144a3d8087148ec77de (patch) | |
| tree | 4dafd291d4aac2af1bfce164af245a0b18e4c523 | |
| parent | b7fc118ef12b8706d2e951aa00101de7d4d56af1 (diff) | |
Adding a check to prevent writeback cache with allocation-on-fill.
[git-p4: depot-paths = "//depot/gpgpu_sim_research/fermi/distribution/": change = 15277]
| -rw-r--r-- | CHANGES | 6 | ||||
| -rw-r--r-- | src/gpgpu-sim/gpu-cache.h | 13 |
2 files changed, 19 insertions, 0 deletions
@@ -11,6 +11,12 @@ Version 3.2.0+edits (development branch) versus 3.2.0 have the same warp_id but different dynamic_warp_ids. - Added extensions to the cache class hierarchy to allow for the use of custom tag_array objects. - Added some additional const-correctness +- Added a check in cache_config to prevent configuration that specifies a + writeback cache with allocation-on-fill policy. The current implementation + of the allocation-on-fill policy assumes a non-writeback cache and never + generates any writeback traffic. Even if the writeback traffic is generated, + the configuration (writeback cache + allocation-on-fill) will inevitably lead + to deadlock. - Bug Fixes: - Applied patch from Kito Cheng to update libopencl for checking NULL error code pointer. diff --git a/src/gpgpu-sim/gpu-cache.h b/src/gpgpu-sim/gpu-cache.h index fb59c01..6dce6b4 100644 --- a/src/gpgpu-sim/gpu-cache.h +++ b/src/gpgpu-sim/gpu-cache.h @@ -179,6 +179,19 @@ public: default: exit_parse_error(); } + // detect invalid configuration + if (m_alloc_policy == ON_FILL and m_write_policy == WRITE_BACK) { + // A writeback cache with allocate-on-fill policy will inevitably lead to deadlock: + // The deadlock happens when an incoming cache-fill evicts a dirty + // line, generating a writeback request. If the memory subsystem + // is congested, the interconnection network may not have + // sufficient buffer for the writeback request. This stalls the + // incoming cache-fill. The stall may propagate through the memory + // subsystem back to the output port of the same core, creating a + // deadlock where the wrtieback request and the incoming cache-fill + // are stalling each other. + assert(0 && "Invalid cache configuration: Writeback cache cannot allocate new line on fill. "); + } } bool disabled() const { return m_disabled;} unsigned get_line_sz() const |
