mirror of
https://github.com/tinygrad/tinygrad.git
synced 2026-04-29 03:00:14 -04:00
amd: enable pmc on gfx12 (#13015)
This commit is contained in:
@@ -139,8 +139,8 @@ class AMDComputeQueue(HWQueue):
|
||||
|
||||
def pmc_reset_counters(self, en=True):
|
||||
self.set_grbm_broadcast()
|
||||
self.wreg(self.gc.regCP_PERFMON_CNTL, perfmon_state=0)
|
||||
if en: self.wreg(self.gc.regCP_PERFMON_CNTL, perfmon_state=1)
|
||||
self.wreg(self.gc.regCP_PERFMON_CNTL if self.dev.target[0] <= 11 else self.gc.regCP_PERFMON_CNTL_1, perfmon_state=0)
|
||||
if en: self.wreg(self.gc.regCP_PERFMON_CNTL if self.dev.target[0] <= 11 else self.gc.regCP_PERFMON_CNTL_1, perfmon_state=1)
|
||||
return self
|
||||
|
||||
def pmc_start(self, counters):
|
||||
@@ -162,7 +162,7 @@ class AMDComputeQueue(HWQueue):
|
||||
|
||||
def pmc_read(self, buf, sched):
|
||||
self.set_grbm_broadcast()
|
||||
self.wreg(self.gc.regCP_PERFMON_CNTL, perfmon_state=1, perfmon_sample_enable=1) # read counters
|
||||
self.wreg(self.gc.regCP_PERFMON_CNTL if self.dev.target[0] <= 11 else self.gc.regCP_PERFMON_CNTL_1, perfmon_state=1, perfmon_sample_enable=1)
|
||||
|
||||
for s in sched:
|
||||
offset = itertools.count(s.off, step=8)
|
||||
@@ -897,7 +897,7 @@ class AMDDevice(HCQCompiled):
|
||||
|
||||
self.pmc_enabled = PROFILE and PMC > 0
|
||||
if self.pmc_enabled:
|
||||
if self.target[0] not in {11}: raise RuntimeError(f'PMC are not supported on gc:{self.target}')
|
||||
if self.target[0] not in {11, 12}: raise RuntimeError(f'PMC are not supported on gc:{self.target}')
|
||||
if not self.iface.is_in_profile_mode(): raise RuntimeError("PMC requires stable power state: run `amd-smi set -l stable_std` for KFD iface")
|
||||
|
||||
self.pmc_sched:list[PMCSample] = []
|
||||
|
||||
@@ -64,7 +64,8 @@ def import_soc(ip):
|
||||
def import_ip_offsets(ip): return type("IPOFF", (object,), import_header(f"include/{('sienna_cichlid' if ip[0] > 9 else 'vega20')}_ip_offset.h"))
|
||||
|
||||
def import_pmc(ip) -> dict[str, tuple[str, str, int]]:
|
||||
m = re.search(r'<gfx11>(.*?)</gfx11>', header_download("rocprofiler/src/core/counters/basic/gfx_metrics.xml", url=ROCM_URL), re.S)
|
||||
ver = min(ip[0], 11) # 12 is same as 11
|
||||
m = re.search(rf'<gfx{ver}>(.*?)</gfx{ver}>', header_download("rocprofiler/src/core/counters/basic/gfx_metrics.xml", url=ROCM_URL), re.S)
|
||||
return {n:(n,b,int(e)) for n,b,e in re.findall(r'<metric name="([A-Za-z0-9_]+)" block="([A-Za-z0-9_]+)" event="([0-9]+)"', m.group(1))} if m else {}
|
||||
|
||||
def import_asic_regs(prefix:str, version:tuple[int, ...], cls=AMDReg) -> dict[str, AMDReg]:
|
||||
|
||||
Reference in New Issue
Block a user