blob: e936c5dd42b79fda18cbe444d214cf68de21ea95 [file] [log] [blame]
import m5
import operator
from os import mkdir, makedirs, getpid, listdir, fsync
from os.path import join as joinpath
from os.path import isdir
from shutil import rmtree, copyfile
def file_append(path, contents):
with open(joinpath(*path), 'a') as f:
f.write(str(contents))
f.flush()
fsync(f.fileno())
def remake_dir(path):
if isdir(path):
rmtree(path)
makedirs(path)
def createHsaTopology(options):
topology_dir = joinpath(m5.options.outdir, \
'fs/sys/devices/virtual/kfd/kfd/topology')
remake_dir(topology_dir)
# Ripped from real Kaveri platform to appease kmt version checks
# Set up generation_id
file_append((topology_dir, 'generation_id'), 1)
# Set up system properties
sys_prop = 'platform_oem 2314885673410447169\n' + \
'platform_id 35322352389441\n' + \
'platform_rev 1\n'
file_append((topology_dir, 'system_properties'), sys_prop)
# Populate the topology tree
# TODO: Just the bare minimum to pass for now
node_dir = joinpath(topology_dir, 'nodes/0')
remake_dir(node_dir)
# must show valid kaveri gpu id or massive meltdown
file_append((node_dir, 'gpu_id'), 2765)
# must have marketing name
file_append((node_dir, 'name'), 'Carrizo\n')
# populate global node properties
# NOTE: SIMD count triggers a valid GPU agent creation
# TODO: Really need to parse these from options
node_prop = 'cpu_cores_count %s\n' % options.num_cpus + \
'simd_count 32\n' + \
'mem_banks_count 0\n' + \
'caches_count 0\n' + \
'io_links_count 0\n' + \
'cpu_core_id_base 16\n' + \
'simd_id_base 2147483648\n' + \
'max_waves_per_simd 40\n' + \
'lds_size_in_kb 64\n' + \
'gds_size_in_kb 0\n' + \
'wave_front_size 64\n' + \
'array_count 1\n' + \
'simd_arrays_per_engine 1\n' + \
'cu_per_simd_array 10\n' + \
'simd_per_cu 4\n' + \
'max_slots_scratch_cu 32\n' + \
'vendor_id 4098\n' + \
'device_id 39028\n' + \
'location_id 8\n' + \
'max_engine_clk_fcompute 800\n' + \
'local_mem_size 0\n' + \
'fw_version 699\n' + \
'capability 4738\n' + \
'max_engine_clk_ccompute 2100\n'
file_append((node_dir, 'properties'), node_prop)