Renaming global spec vars. Replacing L2Banks with total_l2_chan (#251)

Signed-off-by: colramos-amd <colramos@amd.com>
This commit is contained in:
colramos-amd
2024-02-21 15:58:07 -06:00
committed by Cole Ramos
parent 3b1b8d7b5b
commit 86b6c8e848
79 changed files with 1044 additions and 1037 deletions
+68 -61
View File
@@ -54,7 +54,7 @@ VERSION_LOC = [
class MachineSpecs:
def __init__(self, args, sysinfo=None):
if not sysinfo is None:
self.arch = sysinfo.iloc[0]["arch"]
self.gpu_arch = sysinfo.iloc[0]["gpu_arch"]
return
# read timestamp info
now = datetime.now()
@@ -76,16 +76,22 @@ class MachineSpecs:
os_release = path("/etc/os-release").read_text()
self.hostname: str = socket.gethostname()
self.CPU: str = search(r"^model name\s*: (.*?)$", cpuinfo)
self.cpu_model: str = search(r"^model name\s*: (.*?)$", cpuinfo)
self.sbios: str = (
path("/sys/class/dmi/id/bios_vendor").read_text().strip()
+ path("/sys/class/dmi/id/bios_version").read_text().strip()
)
self.kernel_version: str = search(r"version (\S*)", version)
self.ram: str = search(r"MemTotal:\s*(\S*)", meminfo)
self.distro: str = search(r'PRETTY_NAME="(.*?)"', os_release)
if self.distro is None:
self.distro = ""
self.linux_kernel_version: str = search(r"version (\S*)", version)
self.amd_gpu_kernel_version: str = None
if self.amd_gpu_kernel_version is None: #TODO: Extract amdgpu kernel version
self.amd_gpu_kernel_version = ""
self.cpu_memory: str = search(r"MemTotal:\s*(\S*)", meminfo)
self.gpu_memory: str = None #TODO: Extract total gpu memory
if self.gpu_memory is None:
self.gpu_memory = ""
self.linux_distro: str = search(r'PRETTY_NAME="(.*?)"', os_release)
if self.linux_distro is None:
self.linux_distro = ""
self.rocm_version: str = get_rocm_ver().strip()
#FIXME: use device
self.vbios: str = search(
@@ -105,12 +111,12 @@ class MachineSpecs:
##########################################
## B. SoC Specs
##########################################
self.arch: str = self.detect_arch()[0]
self.L1: str = None
self.L2: str = None
self.CU: str = None
self.SIMD: str = None
self.SE: str = None
self.gpu_arch: str = self.detect_arch()[0]
self.gpu_l1: str = None
self.gpu_l2: str = None
self.cu_per_gpu: str = None
self.simd_per_cu: str = None
self.se_per_gpu: str = None
self.wave_size: str = None
self.workgroup_max_size: str = None
self.max_sclk: str = None
@@ -118,26 +124,26 @@ class MachineSpecs:
self.cur_sclk: str = None
self.cur_mclk: str = None
self.max_waves_per_cu: str = None
self.GPU: str = None
self.L2Banks: str = None
self.LDSBanks: str = None
self.numSQC: str = None
self.numPipes: str = None
self.totalL2Banks: str = None
self.hbmBW: str = None
self.gpu_model: str = None
self.L2Banks: str = None #NB: This only used in flatten_tcc_info_across_hbm_stacks()
self.lds_banks_per_cu: str = None
self.sqc_per_gpu: str = None
self.pipes_per_gpu: str = None
self.total_l2_chan: str = None
self.hbm_bw: str = None
# Load above SoC specs via module import
try:
soc_module = importlib.import_module('omniperf_soc.soc_'+ self.arch)
soc_module = importlib.import_module('omniperf_soc.soc_'+ self.gpu_arch)
except ModuleNotFoundError as e:
error("Arch %s marked as supported, but couldn't find class implementation %s." % (self.arch, e))
soc_class = getattr(soc_module, self.arch+'_soc')
error("Arch %s marked as supported, but couldn't find class implementation %s." % (self.gpu_arch, e))
soc_class = getattr(soc_module, self.gpu_arch+'_soc')
self._rocminfo = self._rocminfo[self.detect_arch()[1] + 1 :] # update rocminfo for target section
soc_obj = soc_class(args, self)
# Update arch specific specs
self.totalL2Banks: str = total_l2_banks(
self.GPU, int(self.L2Banks), self.memory_partition
self.total_l2_chan: str = total_l2_banks(
self.gpu_model, int(self.L2Banks), self.memory_partition
)
self.hbmBW: str = str(int(self.max_mclk) / 1000 * 32 * self.get_hbm_channels())
self.hbm_bw: str = str(int(self.max_mclk) / 1000 * 32 * self.get_hbm_channels())
def detect_arch(self):
@@ -156,10 +162,10 @@ class MachineSpecs:
return (gpu_arch, idx1)
def get_hbm_channels(self):
hbmchannels = int(self.totalL2Banks)
hbmchannels = int(self.total_l2_chan)
if (
self.GPU.lower() == "mi300a_a0"
or self.GPU.lower() == "mi300a_a1"
self.gpu_model.lower() == "mi300a_a0"
or self.gpu_model.lower() == "mi300a_a1"
) and self.memory_partition.lower() == "nps1":
# we have an extra 32 channels for the CCD
hbmchannels += 32
@@ -174,12 +180,12 @@ class MachineSpecs:
attr_value = getattr(self, attr_name)
if attr_value is None:
#TODO: use proper logging function when that's merged
logging.warning(f"WARNING: Incomplete class definition for {self.arch}. Expecting populated {attr_name} but detected None.")
logging.warning(f"WARNING: Incomplete class definition for {self.gpu_arch}. Expecting populated {attr_name} but detected None.")
all_populated = False
data[attr_name] = attr_value
if not all_populated:
error("Missing specs fields for %s" % self.arch)
error("Missing specs fields for %s" % self.gpu_arch)
return pd.DataFrame(data, index=[0])
@@ -187,37 +193,38 @@ class MachineSpecs:
return dedent(
f"""\
Host info:
hostname: {self.hostname}
CPU: {self.CPU}
sbios: {self.sbios}
ram: {self.ram}
distro: {self.distro}
kernel_version: {self.kernel_version}
rocm_version: {self.rocm_version}
Hostname: {self.hostname}
CPU Model: {self.cpu_model}
sbios: {self.sbios}
CPU Memory: {self.cpu_memory}
GPU Memory: {self.gpu_memory}
Linux Distro: {self.linux_distro}
Linux Kernel Version: {self.linux_kernel_version}
AMD GPU Kernel Version: {self.amd_gpu_kernel_version}
ROCm Version: {self.rocm_version}
Device info:
GPU: {self.GPU}
arch: {self.arch}
vbios: {self.vbios}
L1: {self.L1} KB
L2: {self.L2} KB
max_sclk: {self.max_sclk} MHz
max_mclk: {self.max_mclk} MHz
cur_sclk: {self.cur_sclk} MHz
cur_mclk: {self.cur_mclk} MHz
CU: {self.CU}
SIMD: {self.SIMD}
SE: {self.SE}
wave_size: {self.wave_size}
workgroup_max_size: {self.workgroup_max_size}
max_waves_per_cu: {self.max_waves_per_cu}
L2Banks: {self.L2Banks}
totalL2Banks: {self.totalL2Banks}
LDSBanks: {self.LDSBanks}
numSQC: {self.numSQC}
numPipes: {self.numPipes}
hbmBW: {self.hbmBW} MB/s
compute_partition: {self.compute_partition}
memory_partition: {self.memory_partition}
GPU Model: {self.gpu_model}
GPU Arch: {self.gpu_arch}
vbios: {self.vbios}
GPU L1: {self.gpu_l1} KB
GPU L2: {self.gpu_l2} KB
Max SCLK: {self.max_sclk} MHz
Max MCLK: {self.max_mclk} MHz
Cur SCLK: {self.cur_sclk} MHz
Cur MCLK: {self.cur_mclk} MHz
CU per GPU: {self.cu_per_gpu}
SIMD per CU: {self.simd_per_cu}
SE per GPU: {self.se_per_gpu}
Wave Size: {self.wave_size}
Workgroup Max Size: {self.workgroup_max_size}
Max Waves per CU: {self.max_waves_per_cu}
Total L2 Channels: {self.total_l2_chan}
LDS Banks per CU: {self.lds_banks_per_cu}
SQC per GPU: {self.sqc_per_gpu}
Pipes per GPU: {self.pipes_per_gpu}
HBM BW: {self.hbm_bw} MB/s
Compute Partition: {self.compute_partition}
Memory Partition: {self.memory_partition}
"""
)