You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
55 lines
1.7 KiB
55 lines
1.7 KiB
2 days ago
|
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: <input_file_path> <output_file_path>")
|
||
|
sys.exit(1)
|
||
|
|
||
|
main()
|