mirror of
https://github.com/tinygrad/tinygrad.git
synced 2026-01-09 15:08:02 -05:00
amd: pmc in mockgpu (#13000)
* amd: pmc in mockgpu * fix * do not open in ci
This commit is contained in:
1
.github/workflows/test.yml
vendored
1
.github/workflows/test.yml
vendored
@@ -644,6 +644,7 @@ jobs:
|
|||||||
run: TRANSCENDENTAL=2 python -m pytest -n=auto test/test_ops.py::TestOps::test_sin test/test_ops.py::TestOps::test_cos test/test_ops.py::TestOps::test_tan test/test_ops.py::TestOps::test_exp test/test_ops.py::TestOps::test_log --durations=20
|
run: TRANSCENDENTAL=2 python -m pytest -n=auto test/test_ops.py::TestOps::test_sin test/test_ops.py::TestOps::test_cos test/test_ops.py::TestOps::test_tan test/test_ops.py::TestOps::test_exp test/test_ops.py::TestOps::test_log --durations=20
|
||||||
- name: Run TestOps.test_add with SQTT
|
- name: Run TestOps.test_add with SQTT
|
||||||
run: |
|
run: |
|
||||||
|
VIZ=1 PMC=1 DEBUG=5 python3 test/test_ops.py TestOps.test_add
|
||||||
VIZ=1 SQTT=1 DEBUG=5 python3 test/test_ops.py TestOps.test_add
|
VIZ=1 SQTT=1 DEBUG=5 python3 test/test_ops.py TestOps.test_add
|
||||||
extra/sqtt/rgptool.py create "/tmp/profile.pkl.$USER" -o /tmp/gpu0.rgp
|
extra/sqtt/rgptool.py create "/tmp/profile.pkl.$USER" -o /tmp/gpu0.rgp
|
||||||
- name: Run process replay tests
|
- name: Run process replay tests
|
||||||
|
|||||||
@@ -85,6 +85,8 @@ class AMDDriver(VirtDriver):
|
|||||||
VirtFile(f'/sys/devices/virtual/kfd/kfd/topology/nodes/{gpu_id}/gpu_id', functools.partial(TextFileDesc, text=f"{gpu_id}")),
|
VirtFile(f'/sys/devices/virtual/kfd/kfd/topology/nodes/{gpu_id}/gpu_id', functools.partial(TextFileDesc, text=f"{gpu_id}")),
|
||||||
VirtFile(f'/sys/devices/virtual/kfd/kfd/topology/nodes/{gpu_id}/properties',
|
VirtFile(f'/sys/devices/virtual/kfd/kfd/topology/nodes/{gpu_id}/properties',
|
||||||
functools.partial(TextFileDesc, text=gpu_props.format(drm_render_minor=gpu_id))),
|
functools.partial(TextFileDesc, text=gpu_props.format(drm_render_minor=gpu_id))),
|
||||||
|
VirtFile(f'/sys/class/drm/renderD{gpu_id}/device/power_dpm_force_performance_level',
|
||||||
|
functools.partial(TextFileDesc, text='profile_standard\n')),
|
||||||
VirtFile(f'/sys/class/drm/renderD{gpu_id}/device/ip_discovery/die/0',
|
VirtFile(f'/sys/class/drm/renderD{gpu_id}/device/ip_discovery/die/0',
|
||||||
functools.partial(DirFileDesc, child_names=[str(am.GC_HWID), str(am.SDMA0_HWID), str(am.NBIF_HWID)])),
|
functools.partial(DirFileDesc, child_names=[str(am.GC_HWID), str(am.SDMA0_HWID), str(am.NBIF_HWID)])),
|
||||||
VirtFile(f'/sys/class/drm/renderD{gpu_id}/device/ip_discovery/die/0/{am.GC_HWID}', functools.partial(DirFileDesc, child_names=['0'])),
|
VirtFile(f'/sys/class/drm/renderD{gpu_id}/device/ip_discovery/die/0/{am.GC_HWID}', functools.partial(DirFileDesc, child_names=['0'])),
|
||||||
|
|||||||
@@ -14,6 +14,9 @@ regSQ_THREAD_TRACE_BUF0_BASE = 0x39e8 + amd_gpu.GC_BASE__INST0_SEG1
|
|||||||
regSQ_THREAD_TRACE_BUF0_SIZE = 0x39e9 + amd_gpu.GC_BASE__INST0_SEG1
|
regSQ_THREAD_TRACE_BUF0_SIZE = 0x39e9 + amd_gpu.GC_BASE__INST0_SEG1
|
||||||
regSQ_THREAD_TRACE_WPTR = 0x39ef + amd_gpu.GC_BASE__INST0_SEG1
|
regSQ_THREAD_TRACE_WPTR = 0x39ef + amd_gpu.GC_BASE__INST0_SEG1
|
||||||
regSQ_THREAD_TRACE_STATUS = 0x39f4 + amd_gpu.GC_BASE__INST0_SEG1
|
regSQ_THREAD_TRACE_STATUS = 0x39f4 + amd_gpu.GC_BASE__INST0_SEG1
|
||||||
|
regCP_PERFMON_CNTL = 0x3808 + amd_gpu.GC_BASE__INST0_SEG1
|
||||||
|
regCPG_PERFCOUNTER1_LO = 0x3000 + amd_gpu.GC_BASE__INST0_SEG1
|
||||||
|
regGUS_PERFCOUNTER_HI = 0x3643 + amd_gpu.GC_BASE__INST0_SEG1
|
||||||
|
|
||||||
class SQTT_EVENTS:
|
class SQTT_EVENTS:
|
||||||
THREAD_TRACE_FINISH = 0x00000037
|
THREAD_TRACE_FINISH = 0x00000037
|
||||||
@@ -130,7 +133,7 @@ class PM4Executor(AMDQueue):
|
|||||||
_src_addr_hi = self._next_dword()
|
_src_addr_hi = self._next_dword()
|
||||||
dst_addr_lo = self._next_dword()
|
dst_addr_lo = self._next_dword()
|
||||||
dst_addr_hi = self._next_dword()
|
dst_addr_hi = self._next_dword()
|
||||||
assert copy_data_flags == 0x100204, hex(copy_data_flags) # better fail than silently do the wrong thing
|
assert copy_data_flags in {0x100204, 0x000204}, hex(copy_data_flags) # better fail than silently do the wrong thing
|
||||||
to_mv(dst_addr_hi<<32|dst_addr_lo, 4).cast('I')[0] = self.gpu.regs[src_addr_lo]
|
to_mv(dst_addr_hi<<32|dst_addr_lo, 4).cast('I')[0] = self.gpu.regs[src_addr_lo]
|
||||||
|
|
||||||
def _exec_wait_reg_mem(self, n):
|
def _exec_wait_reg_mem(self, n):
|
||||||
@@ -280,6 +283,9 @@ class AMDGPURegisters:
|
|||||||
self.regs: dict[tuple[int, int], int] = {}
|
self.regs: dict[tuple[int, int], int] = {}
|
||||||
def __getitem__(self, addr:int) -> int:
|
def __getitem__(self, addr:int) -> int:
|
||||||
if addr == regGRBM_GFX_INDEX: return self.grbm_index
|
if addr == regGRBM_GFX_INDEX: return self.grbm_index
|
||||||
|
if regCPG_PERFCOUNTER1_LO < addr < regGUS_PERFCOUNTER_HI:
|
||||||
|
assert self.regs[(regCP_PERFMON_CNTL, 0)] == 0x401, "read mode should be enabled"
|
||||||
|
return addr << 16 | self.grbm_index
|
||||||
return self.regs[(addr, getbits(self.grbm_index, 16, 23))]
|
return self.regs[(addr, getbits(self.grbm_index, 16, 23))]
|
||||||
def __setitem__(self, addr:int, val:int):
|
def __setitem__(self, addr:int, val:int):
|
||||||
if addr == regGRBM_GFX_INDEX: self.grbm_index = val
|
if addr == regGRBM_GFX_INDEX: self.grbm_index = val
|
||||||
|
|||||||
@@ -750,7 +750,7 @@ class KFDIface:
|
|||||||
|
|
||||||
raise RuntimeError("\n".join(report))
|
raise RuntimeError("\n".join(report))
|
||||||
|
|
||||||
def is_in_profile_mode(self): return FileIOInterface(f'{self.dev_sysfs_path}/power_dpm_force_performance_level').read() == 'profile_standard\n'
|
def is_in_profile_mode(self): return FileIOInterface(f'{self.dev_sysfs_path}/power_dpm_force_performance_level').read()[:16] == 'profile_standard'
|
||||||
|
|
||||||
class PCIIface(PCIIfaceBase):
|
class PCIIface(PCIIfaceBase):
|
||||||
gpus:ClassVar[list[str]] = []
|
gpus:ClassVar[list[str]] = []
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ from tinygrad.uop import Ops, GroupOp
|
|||||||
from tinygrad.uop.mathtraits import MathTrait
|
from tinygrad.uop.mathtraits import MathTrait
|
||||||
from tinygrad.dtype import ConstType, ImageDType, dtypes, DType, truncate, PtrDType, least_upper_dtype, Invalid, InvalidType
|
from tinygrad.dtype import ConstType, ImageDType, dtypes, DType, truncate, PtrDType, least_upper_dtype, Invalid, InvalidType
|
||||||
from tinygrad.helpers import ContextVar, all_int, prod, getenv, all_same, Context, partition, temp, unwrap, T, argfix, Metadata, flatten, TRACEMETA
|
from tinygrad.helpers import ContextVar, all_int, prod, getenv, all_same, Context, partition, temp, unwrap, T, argfix, Metadata, flatten, TRACEMETA
|
||||||
from tinygrad.helpers import PICKLE_BUFFERS, PROFILE, dedup, cdiv, cmod, diskcache_put, to_function_name, cpu_profile, TracingKey, VIZ, SPEC
|
from tinygrad.helpers import PICKLE_BUFFERS, PROFILE, dedup, cdiv, cmod, diskcache_put, to_function_name, cpu_profile, TracingKey, VIZ, SPEC, CI
|
||||||
from tinygrad.helpers import strip_parens, colored
|
from tinygrad.helpers import strip_parens, colored
|
||||||
if TYPE_CHECKING:
|
if TYPE_CHECKING:
|
||||||
from tinygrad.device import Buffer, MultiBuffer
|
from tinygrad.device import Buffer, MultiBuffer
|
||||||
@@ -1075,7 +1075,7 @@ if TRACK_MATCH_STATS or PROFILE:
|
|||||||
def launch_viz(env_str:str, data:str):
|
def launch_viz(env_str:str, data:str):
|
||||||
os.environ[env_str] = "0"
|
os.environ[env_str] = "0"
|
||||||
os.environ[f"{env_str}_DATA"] = data
|
os.environ[f"{env_str}_DATA"] = data
|
||||||
if not int(os.getenv("VIZ", "0")) and not int(os.getenv("PROFILE", "0")) and not int(os.getenv("SQTT", "0")):
|
if not int(os.getenv("VIZ", "0")) and not int(os.getenv("PROFILE", "0")) and not int(os.getenv("SQTT", "0")) and not CI:
|
||||||
args = ['--kernels', getenv("VIZ_DATA", "")] if getenv("VIZ_DATA", "") else []
|
args = ['--kernels', getenv("VIZ_DATA", "")] if getenv("VIZ_DATA", "") else []
|
||||||
args += ['--profile', getenv("PROFILE_DATA", "")] if getenv("PROFILE_DATA", "") else []
|
args += ['--profile', getenv("PROFILE_DATA", "")] if getenv("PROFILE_DATA", "") else []
|
||||||
viz_path = pathlib.Path(__file__).resolve().parent.parent / "viz" / "serve.py"
|
viz_path = pathlib.Path(__file__).resolve().parent.parent / "viz" / "serve.py"
|
||||||
|
|||||||
Reference in New Issue
Block a user