diff options
| author | Wonhyuk Yang <[email protected]> | 2024-06-22 09:50:06 +0900 |
|---|---|---|
| committer | GitHub <[email protected]> | 2024-06-22 00:50:06 +0000 |
| commit | 036b1305fc825fe29c3174dd814c413407db8584 (patch) | |
| tree | 85f7b7b692bc3f580a2bfea7e04699dd1a56f35a | |
| parent | 7dc9977199f6a79f58191b18b64568b6155873ac (diff) | |
Add missing increment part for m_pending_ldgsts with minor fix (#72)
LDGSTS/LDGDEPBAR was introduced #62, but it's increment part was deleted
by mistake. So add it.
In some applications, ldgsts may not exist between ldgdepbar. In
such cases, add exception handling logic to insert an empty vector.
Reported-by: Okkyun Woo <[email protected]>
Signed-off-by: Wonhyuk Yang <[email protected]>
| -rw-r--r-- | src/gpgpu-sim/shader.cc | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/src/gpgpu-sim/shader.cc b/src/gpgpu-sim/shader.cc index 67540e0..b1609d5 100644 --- a/src/gpgpu-sim/shader.cc +++ b/src/gpgpu-sim/shader.cc @@ -1073,6 +1073,12 @@ void shader_core_ctx::issue_warp(register_set &pipe_reg_set, m_warp[warp_id]->set_membar(); } else if (next_inst->m_is_ldgdepbar) { // Add for LDGDEPBAR m_warp[warp_id]->m_ldgdepbar_id++; + // If there are no added LDGSTS, insert an empty vector + if (m_warp[warp_id]->m_ldgdepbar_buf.size() != ldgdepbar_id + 1) { + assert(m_warp[warp_id]->m_ldgdepbar_buf.size() < ldgdepbar_id + 1); + std::vector<warp_inst_t> l; + m_warp[warp_id]->m_ldgdepbar_buf.push_back(l); + } } else if (next_inst->m_is_depbar) { // Add for DEPBAR // Set to true immediately when a DEPBAR instruction is met m_warp[warp_id]->m_waiting_ldgsts = true; @@ -2642,6 +2648,9 @@ void ldst_unit::issue(register_set ®_set) { m_pending_writes[warp_id][reg_id] += n_accesses; } } + if (inst->m_is_ldgsts) { + m_pending_ldgsts[warp_id][inst->pc][inst->get_addr(0)] += n_accesses; + } } inst->op_pipe = MEM__OP; |
