Skip to content

Commit a5a9ce3

Browse files
authored
viz: disasm cleanups from null emulate (tinygrad#14399)
* it's AMDHIPRenderer * don't need that indent * less assignment stuff * that arg order did not make sense * pmc
1 parent 5449287 commit a5a9ce3

File tree

2 files changed

+11
-12
lines changed

2 files changed

+11
-12
lines changed

tinygrad/runtime/ops_null.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import functools
22
from tinygrad.device import Compiled, Compiler, Allocator, CompilerSet, CompilerPair
33
from tinygrad.engine.jit import MultiGraphRunner
4-
from tinygrad.renderer.cstyle import Renderer, CStyleLanguage, HIPRenderer
4+
from tinygrad.renderer.cstyle import Renderer, CStyleLanguage, AMDHIPRenderer
55
from tinygrad.uop.ops import Ops
66
from tinygrad.helpers import cpu_profile, EMULATE, NULL_IR3, NULL_NAK
77
from tinygrad.renderer.nir import IR3Renderer, NAKRenderer
@@ -33,9 +33,9 @@ class NullDevice(Compiled):
3333
def __init__(self, device:str):
3434
renderer:functools.partial|type[Renderer]
3535
match str(EMULATE.value):
36-
case "AMD": renderer = functools.partial(HIPRenderer, "gfx1100")
37-
case "AMD_RDNA4": renderer = functools.partial(HIPRenderer, "gfx1201")
38-
case "AMD_CDNA4": renderer = functools.partial(HIPRenderer, "gfx950")
36+
case "AMD": renderer = functools.partial(AMDHIPRenderer, "gfx1100")
37+
case "AMD_RDNA4": renderer = functools.partial(AMDHIPRenderer, "gfx1201")
38+
case "AMD_CDNA4": renderer = functools.partial(AMDHIPRenderer, "gfx950")
3939
case "": renderer = NullRenderer
4040
case _: raise RuntimeError(f"can't EMULATE device: {EMULATE.value}")
4141
compilers = CompilerSet([CompilerPair(renderer, Compiler), CompilerPair(functools.partial(IR3Renderer, 0x6030001), None, NULL_IR3), # adreno 630

tinygrad/viz/serve.py

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -301,7 +301,7 @@ def load_counters(profile:list[ProfileEvent]) -> None:
301301
steps:list[dict] = []
302302
if (pmc:=v.get(ProfilePMCEvent)):
303303
steps.append(create_step("PMC", ("/prg-pmc", len(ctxs), len(steps)), pmc))
304-
all_counters[(name, run_number[k], k)] = pmc[0]
304+
all_counters[(name, run_number[k], pname)] = pmc[0]
305305
# to decode a SQTT trace, we need the raw stream, program binary and device properties
306306
if (sqtt:=v.get(ProfileSQTTEvent)):
307307
for e in sqtt:
@@ -345,7 +345,7 @@ def unpack_sqtt(key:tuple[str, int], data:list, p:ProfileProgramEvent) -> tuple[
345345
# * init decoder
346346
from extra.sqtt.roc import decode
347347
base = unwrap(p.base)
348-
addr_table = amd_decode(device_props[p.device]["gfx_target_version"], unwrap(p.lib))
348+
addr_table = amd_decode(unwrap(p.lib), device_props[p.device]["gfx_target_version"], )
349349
disasm:dict[int, tuple[str, int]] = {addr+base:(inst.disasm(), inst.size()) for addr, inst in addr_table.items()}
350350
rctx = decode(data, {p.name:disasm})
351351
cu_events:dict[str, list[ProfileEvent]] = {}
@@ -432,7 +432,7 @@ def amd_readelf(lib:bytes) -> list[dict]:
432432
".group_segment_fixed_size":"LDS size", ".private_segment_fixed_size":"Scratch size"}
433433
return [{"label":label, "value":v} for k,label in keys.items() if (v:=notes["amdhsa.kernels"][0][k]) > 0]
434434

435-
def amd_decode(target:int, lib:bytes) -> dict[int, Any]: # Any is the Inst class from extra.assembly.amd.dsl
435+
def amd_decode(lib:bytes, target:int) -> dict[int, Any]: # Any is the Inst class from extra.assembly.amd.dsl
436436
from tinygrad.runtime.support.elf import elf_loader
437437
from extra.assembly.amd import detect_format
438438
from extra.assembly.amd.dsl import Inst
@@ -460,7 +460,7 @@ def parse_branch(inst) -> int|None:
460460
COND_TAKEN, COND_NOT_TAKEN, UNCOND = range(3)
461461
def amdgpu_cfg(lib:bytes, target:int) -> dict:
462462
# decode
463-
pc_table = amd_decode(target, lib)
463+
pc_table = amd_decode(lib, target)
464464
# get leaders
465465
leaders:set[int] = {next(iter(pc_table))}
466466
for pc, inst in pc_table.items():
@@ -509,15 +509,14 @@ def get_render(query:str) -> dict:
509509
if fmt == "asm":
510510
ret:dict = {"metadata":[]}
511511
if data.device.startswith("AMD") and data.lib is not None:
512-
with soft_err(lambda err: ret.update(err)):
513-
ret.update(amdgpu_cfg(lib:=data.lib, device_props[data.device]["gfx_target_version"]))
514-
with soft_err(lambda err: ret["metadata"].append(err)): ret["metadata"].append(amd_readelf(lib))
512+
with soft_err(lambda err: ret.update(err)): ret.update(amdgpu_cfg(data.lib, device_props[data.device]["gfx_target_version"]))
513+
with soft_err(lambda err: ret["metadata"].append(err)): ret["metadata"].append(amd_readelf(data.lib))
515514
else: ret["src"] = get_stdout(lambda: (compiler:=Device[data.device].compiler).disassemble(compiler.compile(data.src)))
516515
return ret
517516
if fmt == "all-pmc":
518517
durations, pmc = data
519518
ret = {"cols":{}, "rows":[]}
520-
for (name, n, k),events in data[1].items():
519+
for (name, n, k),events in pmc.items():
521520
pmc_table = unpack_pmc(events)
522521
ret["cols"].update([(r[0], None) for r in pmc_table["rows"]])
523522
ret["rows"].append((name, durations[k][n-1], *[r[1] for r in pmc_table["rows"]]))

0 commit comments

Comments
 (0)