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 0000000..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<DeviceFDEntry>(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 0000000..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_DRIVER_HH__
+
+#include "cpu/thread_context.hh"
+#include "sim/emul_driver.hh"
+#include "sim/process.hh"
+
+struct GPURenderDriverParams;
+
+class GPURenderDriver final : public EmulatedDriver
+{
+ public:
+ GPURenderDriver(const GPURenderDriverParams &p);
+
+ int open(ThreadContext *tc, int mode, int flags) override;
+
+ int ioctl(ThreadContext *tc, unsigned req, Addr buf)
+ { return -EBADF; }
+};
+
+#endif
--
To view, visit https://gem5-review.googlesource.com/c/public/gem5/+/46244
To unsubscribe, or for help writing mail filters, visit
https://gem5-review.googlesource.com/settings
Gerrit-Project: public/gem5
Gerrit-Branch: develop
Gerrit-Change-Id: I65602346cbf17b2dc80e114046ebf5c9830a1507
Gerrit-Change-Number: 46244
Gerrit-PatchSet: 1
Gerrit-Owner: Kyle Roarty <kyleroarty1...@gmail.com>
Gerrit-MessageType: newchange
_______________________________________________
gem5-dev mailing list -- gem5-dev@gem5.org
To unsubscribe send an email to gem5-dev-le...@gem5.org
%(web_page_url)slistinfo%(cgiext)s/%(_internal_name)s