Skip to content

Commit 70e99c7

Browse files
author
anurag
committed
update device globally
Signed-off-by: anurag <anurag@amd.com>
1 parent 3559536 commit 70e99c7

2 files changed

Lines changed: 20 additions & 7 deletions

File tree

src/mldebug/backend/core_dump_impl.py

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
import struct
99
from pathlib import Path
1010
from mldebug.utils import print_tile_grid
11-
from mldebug.arch import AIE_DEV_PHX, AIE_DEV_STX, AIE_DEV_TEL, AIE_DEV_NPU3
11+
from mldebug.arch import AIE_DEV_PHX, AIE_DEV_STX, AIE_DEV_TEL, AIE_DEV_NPU3, load_aie_arch
1212
from .backend_interface import BackendInterface
1313

1414
try:
@@ -62,17 +62,19 @@ class CoreDumpFallbackReader:
6262
Pure Python fallback implementation for reading core dump files.
6363
Replicates the C++ CoreDumpDataAccessBackend logic.
6464
"""
65-
def __init__(self, core_dump_file, dev_name, no_header=False):
65+
def __init__(self, core_dump_file, dev_name, no_header=False, args=None):
6666
"""
6767
Initialize the fallback reader
6868
6969
Args:
7070
core_dump_file (str): Path to the binary core dump file
7171
dev_name (str): Device name (phx, stx, telluride, npu3)
7272
no_header (bool): If True, skip header parsing and treat data as starting at offset 0
73+
args: Used to update device and aie_iface.
7374
"""
7475
self.filename = core_dump_file
7576
self.dev_name = dev_name.lower()
77+
self.args = args
7678
self.file_handle = None
7779

7880
# Without a header to parse, we have no way to recover from an unknown device name.
@@ -165,7 +167,8 @@ def _parse_header(self):
165167
if len(metadata_data) != 6:
166168
raise RuntimeError("Core dump file is corrupted: cannot read device metadata")
167169

168-
hw_gen, core_row_start, mem_row_start, mem_tile_rows, total_rows, total_cols = struct.unpack("<BBBBBB", metadata_data)
170+
hw_gen, core_row_start, mem_row_start, mem_tile_rows, total_rows, total_cols = (
171+
struct.unpack("<BBBBBB", metadata_data))
169172

170173
# Detect device from header hwGen and override dev_name/metadata
171174
detected_dev = None
@@ -186,6 +189,13 @@ def _parse_header(self):
186189
self.dev_name = detected_dev
187190
self.metadata = DEVICE_CONFIGS[detected_dev]
188191

192+
# Refresh args.aie_iface so the rest of the tool uses the architecture
193+
# that matches the device baked into the core dump.
194+
if self.args:
195+
self.args.device = detected_dev
196+
self.args.aie_iface = load_aie_arch(detected_dev)
197+
self.args.aie_iface.init(detected_dev == AIE_DEV_PHX)
198+
189199
expected_core_row_start = self.metadata["core_row_start"]
190200
expected_mem_row_start = self.metadata["mem_row_start"]
191201
expected_mem_tile_rows = self.metadata["memtile_rows"]
@@ -336,7 +346,7 @@ class CoreDumpImpl(BackendInterface):
336346
"""
337347

338348
is_offline = True
339-
def __init__(self, aie_overlay_tiles, ctx_id, pid, dev_name, core_dump_file=None, no_header=False) -> None:
349+
def __init__(self, aie_overlay_tiles, ctx_id, pid, dev_name, core_dump_file=None, no_header=False, args=None) -> None:
340350
"""
341351
Initialize the Core Dump backend
342352
@@ -348,6 +358,7 @@ def __init__(self, aie_overlay_tiles, ctx_id, pid, dev_name, core_dump_file=None
348358
core_dump_file: Path to core dump file (required)
349359
no_header: If True, parse core dump assuming no header (data starts at offset 0).
350360
Forces use of the Python fallback reader.
361+
args: Used for device management
351362
"""
352363
self.overlay_aie_core_tiles = aie_overlay_tiles
353364
self.pc_brkpts = [0, 0]
@@ -360,7 +371,8 @@ def __init__(self, aie_overlay_tiles, ctx_id, pid, dev_name, core_dump_file=None
360371

361372
if no_header or not HAS_XRT_BACKEND:
362373
# Python fallback reader is required to support headerless parsing
363-
#print("[INFO] --no_header specified: using Python fallback reader (C++ binding does not support headerless mode)")
374+
#print("[INFO] --no_header specified: using Python fallback reader "
375+
# "(C++ binding does not support headerless mode)")
364376
self.use_fallback = True
365377
else:
366378
# Try to initialize the C++ binding first
@@ -371,7 +383,7 @@ def __init__(self, aie_overlay_tiles, ctx_id, pid, dev_name, core_dump_file=None
371383
self.use_fallback = True
372384

373385
if self.use_fallback:
374-
self.fallback_reader = CoreDumpFallbackReader(core_dump_file, dev_name, no_header=no_header)
386+
self.fallback_reader = CoreDumpFallbackReader(core_dump_file, dev_name, no_header=no_header, args=args)
375387

376388
print("[INFO] Core Dump backend is read-only. Write/control operations will be ignored.")
377389

src/mldebug/backend/factory.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,5 +69,6 @@ def create_backend(backend_type, config):
6969
core_dump_mod = importlib.import_module("mldebug.backend.core_dump_impl")
7070
return core_dump_mod.CoreDumpImpl(
7171
config.tiles, config.ctx_id, config.pid, config.device,
72-
core_dump_file=config.core_dump_file, no_header=config.no_header
72+
core_dump_file=config.core_dump_file, no_header=config.no_header,
73+
args=config.args,
7374
)

0 commit comments

Comments
 (0)