diff options
| -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 |
