[gem5-dev] Change in gem5/gem5[develop]: configs,gpu-compute: Add render driver needed for ROCm 4
Kyle Roarty has submitted this change. ( https://gem5-review.googlesource.com/c/public/gem5/+/46244 ) Change subject: configs,gpu-compute: Add render driver needed for ROCm 4 .. configs,gpu-compute: Add render driver needed for ROCm 4 ROCm 4 utilizes the render driver located at /dev/dri/renderDXXX. This patch implements a very simple driver that just returns a file descriptor when opened, as testing has shown that's all that's needed Change-Id: I65602346cbf17b2dc80e114046ebf5c9830a1507 Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/46244 Tested-by: kokoro Reviewed-by: Jason Lowe-Power Reviewed-by: Matt Sinclair Maintainer: Jason Lowe-Power Maintainer: Matt Sinclair --- M configs/example/apu_se.py M configs/example/hsaTopology.py M src/gpu-compute/GPU.py M src/gpu-compute/SConscript A src/gpu-compute/gpu_render_driver.cc A src/gpu-compute/gpu_render_driver.hh 6 files changed, 124 insertions(+), 2 deletions(-) Approvals: Jason Lowe-Power: Looks good to me, but someone else must approve; Looks good to me, approved Matt Sinclair: Looks good to me, approved; Looks good to me, approved kokoro: Regressions pass diff --git a/configs/example/apu_se.py b/configs/example/apu_se.py index f779df3..98a1e19 100644 --- a/configs/example/apu_se.py +++ b/configs/example/apu_se.py @@ -436,6 +436,9 @@ gfxVersion = args.gfx_version, dGPUPoolID = 1, m_type = args.m_type) +renderDriNum = 128 +render_driver = GPURenderDriver(filename = f'dri/renderD{renderDriNum}') + # Creating the GPU kernel launching components: that is the HSA # packet processor (HSAPP), GPU command processor (CP), and the # dispatcher. @@ -498,7 +501,8 @@ "HSA_ENABLE_SDMA=0"] process = Process(executable = executable, cmd = [args.cmd] - + args.options.split(), drivers = [gpu_driver], env = env) + + args.options.split(), + drivers = [gpu_driver, render_driver], env = env) for cpu in cpu_list: cpu.createThreads() diff --git a/configs/example/hsaTopology.py b/configs/example/hsaTopology.py index 78fe1f7..78193e0 100644 --- a/configs/example/hsaTopology.py +++ b/configs/example/hsaTopology.py @@ -156,6 +156,9 @@ file_append((node_dir, 'gpu_id'), 22124) file_append((node_dir, 'name'), 'Vega\n') +# Should be the same as the render driver filename (dri/renderD) +drm_num = 128 + # 96 in real Vega # Random comment for comparison purposes caches = 0 @@ -200,7 +203,7 @@ 'vendor_id 4098\n' + \ 'device_id 26720\n' + \ 'location_id 1024\n'+ \ -'drm_render_minor 128\n'+ \ +'drm_render_minor %s\n' % drm_num + \ 'hive_id 0\n' + \ 'num_sdma_engines 2\n' + \ 'num_sdma_xgmi_engines 0\n' + \ @@ -329,6 +332,9 @@ file_append((node_dir, 'gpu_id'), 50156) file_append((node_dir, 'name'), 'Fiji\n') +# Should be the same as the render driver filename (dri/renderD) +drm_num = 128 + # Real Fiji shows 96, but building that topology is complex and doesn't # appear to be required for anything. caches = 0 @@ -373,6 +379,7 @@ 'vendor_id 4098\n' + \ 'device_id 29440\n' + \ 'location_id 512\n' + \ +'drm_render_minor %s\n' % drm_num + \ 'max_engine_clk_fcompute %s\n' \ % int(toFrequency(options.gpu_clock) / 1e6) + \ 'local_mem_size 4294967296\n' + \ @@ -424,6 +431,9 @@ mem_banks_cnt = 1 +# Should be the same as the render driver filename (dri/renderD) +drm_num = 128 + # populate global node properties # NOTE: SIMD count triggers a valid GPU agent creation node_prop = 'cpu_cores_count %s\n' % options.num_cpus + \ @@ -446,6 +456,7 @@ 'vendor_id 4098\n' + \ 'device_id 39028\n' + \ 'location_id 8\n' + \ +'drm_render_minor %s\n' % drm_num + \ 'max_engine_clk_fcompute %s\n' \ % int(toFrequency(options.gpu_clock) / 1e6) + \ 'local_mem_size 0\n'
[gem5-dev] Change in gem5/gem5[develop]: configs,gpu-compute: Add render driver needed for ROCm 4
Kyle Roarty has uploaded this change for review. ( https://gem5-review.googlesource.com/c/public/gem5/+/46244 ) Change subject: configs,gpu-compute: Add render driver needed for ROCm 4 .. configs,gpu-compute: Add render driver needed for ROCm 4 ROCm 4 utilizes the render driver located at /dev/dri/renderDXXX. This patch implements a very simple driver that just returns a file descriptor when opened, as testing has shown that's all that's needed Change-Id: I65602346cbf17b2dc80e114046ebf5c9830a1507 --- M configs/example/apu_se.py M configs/example/hsaTopology.py M src/gpu-compute/GPU.py M src/gpu-compute/SConscript A src/gpu-compute/gpu_render_driver.cc A src/gpu-compute/gpu_render_driver.hh 6 files changed, 49 insertions(+), 1 deletion(-) diff --git a/configs/example/apu_se.py b/configs/example/apu_se.py index f779df3..b9e1e7c 100644 --- a/configs/example/apu_se.py +++ b/configs/example/apu_se.py @@ -436,6 +436,8 @@ gfxVersion = args.gfx_version, dGPUPoolID = 1, m_type = args.m_type) +render_driver = GPURenderDriver(filename = 'dri/renderD128') + # Creating the GPU kernel launching components: that is the HSA # packet processor (HSAPP), GPU command processor (CP), and the # dispatcher. @@ -498,7 +500,8 @@ "HSA_ENABLE_SDMA=0"] process = Process(executable = executable, cmd = [args.cmd] - + args.options.split(), drivers = [gpu_driver], env = env) + + args.options.split(), + drivers = [gpu_driver, render_driver], env = env) for cpu in cpu_list: cpu.createThreads() diff --git a/configs/example/hsaTopology.py b/configs/example/hsaTopology.py index 78fe1f7..b77d1c1 100644 --- a/configs/example/hsaTopology.py +++ b/configs/example/hsaTopology.py @@ -373,6 +373,7 @@ 'vendor_id 4098\n' + \ 'device_id 29440\n' + \ 'location_id 512\n' + \ +'drm_render_minor 128\n'+ \ 'max_engine_clk_fcompute %s\n' \ % int(toFrequency(options.gpu_clock) / 1e6) + \ 'local_mem_size 4294967296\n' + \ @@ -446,6 +447,7 @@ 'vendor_id 4098\n' + \ 'device_id 39028\n' + \ 'location_id 8\n' + \ +'drm_render_minor 128\n'+ \ 'max_engine_clk_fcompute %s\n' \ % int(toFrequency(options.gpu_clock) / 1e6) + \ 'local_mem_size 0\n'+ \ diff --git a/src/gpu-compute/GPU.py b/src/gpu-compute/GPU.py index 579c84b..ace83a5 100644 --- a/src/gpu-compute/GPU.py +++ b/src/gpu-compute/GPU.py @@ -254,6 +254,10 @@ # default value: 5/C_RO_S (only allow caching in GL2 for read. Shared) m_type = Param.Int("Default MTYPE for cache. Valid values between 0-7"); +class GPURenderDriver(EmulatedDriver): +type = 'GPURenderDriver' +cxx_header = 'gpu-compute/gpu_render_driver.hh' + class GPUDispatcher(SimObject): type = 'GPUDispatcher' cxx_header = 'gpu-compute/dispatcher.hh' diff --git a/src/gpu-compute/SConscript b/src/gpu-compute/SConscript index adb9b0e..ae0bfab 100644 --- a/src/gpu-compute/SConscript +++ b/src/gpu-compute/SConscript @@ -52,6 +52,7 @@ Source('gpu_compute_driver.cc') Source('gpu_dyn_inst.cc') Source('gpu_exec_context.cc') +Source('gpu_render_driver.cc') Source('gpu_static_inst.cc') Source('gpu_tlb.cc') Source('lds_state.cc') diff --git a/src/gpu-compute/gpu_render_driver.cc b/src/gpu-compute/gpu_render_driver.cc new file mode 100644 index 000..9d9cbd2 --- /dev/null +++ b/src/gpu-compute/gpu_render_driver.cc @@ -0,0 +1,17 @@ +#include "gpu-compute/gpu_render_driver.hh" + +#include "params/GPURenderDriver.hh" +#include "sim/fd_entry.hh" + +GPURenderDriver::GPURenderDriver(const GPURenderDriverParams &p) +: EmulatedDriver(p) +{ +} + +int GPURenderDriver::open(ThreadContext *tc, int mode, int flags) +{ +auto process = tc->getProcessPtr(); +auto device_fd_entry = std::make_shared(this, filename); +int tgt_fd = process->fds->allocFD(device_fd_entry); +return tgt_fd; +} diff --git a/src/gpu-compute/gpu_render_driver.hh b/src/gpu-compute/gpu_render_driver.hh new file mode 100644 index 000..46d1b8d --- /dev/null +++ b/src/gpu-compute/gpu_render_driver.hh @@ -0,0 +1,21 @@ +#ifndef __GPU_COMPUTE_GPU_RENDER_DRIVER_HH__ +#define __GPU_COMPUTE_GPU_RENDER