import re, ctypes, sys, importlib from tinygrad.runtime.support.am.amdev import AMDev, AMRegister class AMDFake(AMDev): def __init__(self, devfmt, vram, doorbell, mmio, dma_regions=None): self.devfmt, self.vram, self.doorbell64, self.mmio, self.dma_regions = devfmt, vram, doorbell, mmio, dma_regions self._run_discovery() self._build_regs() amdev = importlib.import_module("tinygrad.runtime.support.am.amdev") amdev.AMDev = AMDFake from tinygrad.runtime.ops_amd import PCIIface def parse_amdgpu_logs(log_content, register_names=None): register_map = register_names final = "" def replace_register(match): register = match.group(1) return f"Reading register {register_map.get(int(register, base=16), register)}" pattern = r'Reading register (0x[0-9a-fA-F]+)' processed_log = re.sub(pattern, replace_register, log_content) def replace_register_2(match): register = match.group(1) return f"Writing register {register_map.get(int(register, base=16), register)}" pattern = r'Writing register (0x[0-9a-fA-F]+)' processed_log = re.sub(pattern, replace_register_2, processed_log) return processed_log def main(): reg_names = {} dev = PCIIface(None, 0) for x, y in dev.dev_impl.__dict__.items(): if isinstance(y, AMRegister): for inst, addr in y.addr.keys(): reg_names[addr] = f"{x}, xcc={inst}" with open(sys.argv[1], 'r') as f: log_content = log_content_them = f.read() processed_log = parse_amdgpu_logs(log_content, reg_names) with open(sys.argv[2], 'w') as f: f.write(processed_log) if __name__ == '__main__': if len(sys.argv) != 3: print("Usage: ") sys.exit(1) main()