diff --git a/extra/hcq2/ops_amd2.py b/extra/hcq2/ops_amd2.py index 640a519688..38a76c257a 100644 --- a/extra/hcq2/ops_amd2.py +++ b/extra/hcq2/ops_amd2.py @@ -158,7 +158,8 @@ def pm4_submit(ctx, lin): ib = UOp.placeholder((size_dw + 2,), dtypes.uint32, next(UOp.unique_num), device=devs, volatile=True).rtag("cmdbuf") done_idx, submit_idx = UOp.const(size_dw + 0, dtypes.int), UOp.const(size_dw + 1, dtypes.int) - submitted = (counter:=ib.after(make_patches(ib, [((size_dw + i) * 4, UOp.const(0, dtypes.uint32)) for i in range(2)])).index(submit_idx)).load() + init_counters = make_patches(ib, [((size_dw + i) * 4, UOp.const(0, dtypes.uint32)) for i in range(2)]).rtag("link") + submitted = (counter:=ib.after(init_counters).index(submit_idx)).load() completed = ib.after(loop:=UOp.loop(0)).index(done_idx).load() ib_free = completed.end(loop, completed != submitted) diff --git a/tinygrad/runtime/support/hcq2.py b/tinygrad/runtime/support/hcq2.py index 3d5fdf567f..3952f30e9e 100644 --- a/tinygrad/runtime/support/hcq2.py +++ b/tinygrad/runtime/support/hcq2.py @@ -252,6 +252,7 @@ def is_value_known_at_link(val:UOp) -> bool: return not val.variables() and not runtime_reads and all(b.op is not Ops.PARAM or b.tag is not None for b in addressed_bufs) def is_link_patch(p:UOp, jit:bool) -> bool: + if p.tag == "link": return True store = p.src[0] if (is_binary_patch:=(p.op is Ops.END and p.src[0].op is Ops.STORE)) else p if not jit: return store.buf_uop.tag == "program" return is_binary_patch or (store.op is Ops.STORE and is_value_known_at_link(store.src[1]))