gem5-dev@gem5.org

The gem5 Developer List

View all threads

[S] Change in gem5/gem5[release-staging-v23-0]: gpu-compute,configs: Make sim exits conditional

BB
Bobby Bruce (Gerrit)
Fri, Jul 7, 2023 9:22 PM

Bobby Bruce has submitted this change. (
https://gem5-review.googlesource.com/c/public/gem5/+/72138?usp=email )

Change subject: gpu-compute,configs: Make sim exits conditional
......................................................................

gpu-compute,configs: Make sim exits conditional

The unconditional exit event when a kernel completes that was added in
c644eae2ddd34cf449a9c4476730bd29703c4dd7 is causing scripts that do not
ignore unknown exit events to end simulation prematurely. One such
script is the apu_se.py script used in SE mode GPU simulation. Make this
exit conditional to the parameter being set to a valid value to avoid
this problem.

Change-Id: I1d2c082291fdbcf27390913ffdffb963ec8080dd
Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/72098
Reviewed-by: Jason Lowe-Power power.jg@gmail.com
Maintainer: Matt Sinclair mattdsinclair@gmail.com
Maintainer: Jason Lowe-Power power.jg@gmail.com
Reviewed-by: Matt Sinclair mattdsinclair@gmail.com
Tested-by: kokoro noreply+kokoro@google.com
(cherry picked from commit 3756af8ed91f0860dcfb0a7111478212980e37ae)
Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/72138
Maintainer: Bobby Bruce bbruce@ucdavis.edu
Reviewed-by: Bobby Bruce bbruce@ucdavis.edu

M configs/example/gpufs/system/system.py
M src/gpu-compute/GPU.py
M src/gpu-compute/dispatcher.cc
M src/gpu-compute/dispatcher.hh
4 files changed, 14 insertions(+), 2 deletions(-)

Approvals:
Bobby Bruce: Looks good to me, approved; Looks good to me, approved
kokoro: Regressions pass

diff --git a/configs/example/gpufs/system/system.py
b/configs/example/gpufs/system/system.py
index 263ffc0..4718929 100644
--- a/configs/example/gpufs/system/system.py
+++ b/configs/example/gpufs/system/system.py
@@ -115,7 +115,8 @@
numHWQueues=args.num_hw_queues,
walker=hsapp_pt_walker,
)

  • dispatcher = GPUDispatcher()
  • dispatcher_exit_events = True if args.exit_at_gpu_kernel > -1 else
    False

  • dispatcher = GPUDispatcher(kernel_exit_events=dispatcher_exit_events)
    cp_pt_walker = VegaPagetableWalker()
    gpu_cmd_proc = GPUCommandProcessor(
    hsapp=gpu_hsapp, dispatcher=dispatcher, walker=cp_pt_walker
    diff --git a/src/gpu-compute/GPU.py b/src/gpu-compute/GPU.py
    index c5449cc..c64a6b7 100644
    --- a/src/gpu-compute/GPU.py
    +++ b/src/gpu-compute/GPU.py
    @@ -328,6 +328,10 @@
    cxx_class = "gem5::GPUDispatcher"
    cxx_header = "gpu-compute/dispatcher.hh"

  • kernel_exit_events = Param.Bool(

  •    False, "Enable exiting sim loop after a kernel"
    
  • )

class GPUCommandProcessor(DmaVirtDevice):
type = "GPUCommandProcessor"
diff --git a/src/gpu-compute/dispatcher.cc b/src/gpu-compute/dispatcher.cc
index a76ba7c..d63c875 100644
--- a/src/gpu-compute/dispatcher.cc
+++ b/src/gpu-compute/dispatcher.cc
@@ -50,7 +50,8 @@
: SimObject(p), shader(nullptr), gpuCmdProc(nullptr),
tickEvent([this]{ exec(); },
"GPU Dispatcher tick", false, Event::CPU_Tick_Pri),

  •  dispatchActive(false), stats(this)
    
  •  dispatchActive(false), kernelExitEvents(p.kernel_exit_events),
    
  •  stats(this)
    
    {
    schedule(&tickEvent, 0);
    }
    @@ -330,6 +331,10 @@
    DPRINTF(GPUWgLatency, "Kernel Complete ticks:%d kernel:%d\n",
    curTick(), kern_id);
    DPRINTF(GPUKernelInfo, "Completed kernel %d\n", kern_id);
  •    if (kernelExitEvents) {
    
  •        exitSimLoop("GPU Kernel Completed");
    
  •    }
    }
    
    if (!tickEvent.scheduled()) {
    

diff --git a/src/gpu-compute/dispatcher.hh b/src/gpu-compute/dispatcher.hh
index 7699cef..eafa080 100644
--- a/src/gpu-compute/dispatcher.hh
+++ b/src/gpu-compute/dispatcher.hh
@@ -92,6 +92,8 @@
std::queue<int> doneIds;
// is there a kernel in execution?
bool dispatchActive;

  • // Enable exiting sim loop after each kernel completion
  • bool kernelExitEvents;
protected:
  struct GPUDispatcherStats : public statistics::Group

--
To view, visit
https://gem5-review.googlesource.com/c/public/gem5/+/72138?usp=email
To unsubscribe, or for help writing mail filters, visit
https://gem5-review.googlesource.com/settings?usp=email

Gerrit-MessageType: merged
Gerrit-Project: public/gem5
Gerrit-Branch: release-staging-v23-0
Gerrit-Change-Id: I1d2c082291fdbcf27390913ffdffb963ec8080dd
Gerrit-Change-Number: 72138
Gerrit-PatchSet: 3
Gerrit-Owner: Matthew Poremba matthew.poremba@amd.com
Gerrit-Reviewer: Bobby Bruce bbruce@ucdavis.edu
Gerrit-Reviewer: Jason Lowe-Power jason@lowepower.com
Gerrit-Reviewer: kokoro noreply+kokoro@google.com
Gerrit-CC: kokoro noreply+kokoro@google.com

Bobby Bruce has submitted this change. ( https://gem5-review.googlesource.com/c/public/gem5/+/72138?usp=email ) Change subject: gpu-compute,configs: Make sim exits conditional ...................................................................... gpu-compute,configs: Make sim exits conditional The unconditional exit event when a kernel completes that was added in c644eae2ddd34cf449a9c4476730bd29703c4dd7 is causing scripts that do not ignore unknown exit events to end simulation prematurely. One such script is the apu_se.py script used in SE mode GPU simulation. Make this exit conditional to the parameter being set to a valid value to avoid this problem. Change-Id: I1d2c082291fdbcf27390913ffdffb963ec8080dd Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/72098 Reviewed-by: Jason Lowe-Power <power.jg@gmail.com> Maintainer: Matt Sinclair <mattdsinclair@gmail.com> Maintainer: Jason Lowe-Power <power.jg@gmail.com> Reviewed-by: Matt Sinclair <mattdsinclair@gmail.com> Tested-by: kokoro <noreply+kokoro@google.com> (cherry picked from commit 3756af8ed91f0860dcfb0a7111478212980e37ae) Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/72138 Maintainer: Bobby Bruce <bbruce@ucdavis.edu> Reviewed-by: Bobby Bruce <bbruce@ucdavis.edu> --- M configs/example/gpufs/system/system.py M src/gpu-compute/GPU.py M src/gpu-compute/dispatcher.cc M src/gpu-compute/dispatcher.hh 4 files changed, 14 insertions(+), 2 deletions(-) Approvals: Bobby Bruce: Looks good to me, approved; Looks good to me, approved kokoro: Regressions pass diff --git a/configs/example/gpufs/system/system.py b/configs/example/gpufs/system/system.py index 263ffc0..4718929 100644 --- a/configs/example/gpufs/system/system.py +++ b/configs/example/gpufs/system/system.py @@ -115,7 +115,8 @@ numHWQueues=args.num_hw_queues, walker=hsapp_pt_walker, ) - dispatcher = GPUDispatcher() + dispatcher_exit_events = True if args.exit_at_gpu_kernel > -1 else False + dispatcher = GPUDispatcher(kernel_exit_events=dispatcher_exit_events) cp_pt_walker = VegaPagetableWalker() gpu_cmd_proc = GPUCommandProcessor( hsapp=gpu_hsapp, dispatcher=dispatcher, walker=cp_pt_walker diff --git a/src/gpu-compute/GPU.py b/src/gpu-compute/GPU.py index c5449cc..c64a6b7 100644 --- a/src/gpu-compute/GPU.py +++ b/src/gpu-compute/GPU.py @@ -328,6 +328,10 @@ cxx_class = "gem5::GPUDispatcher" cxx_header = "gpu-compute/dispatcher.hh" + kernel_exit_events = Param.Bool( + False, "Enable exiting sim loop after a kernel" + ) + class GPUCommandProcessor(DmaVirtDevice): type = "GPUCommandProcessor" diff --git a/src/gpu-compute/dispatcher.cc b/src/gpu-compute/dispatcher.cc index a76ba7c..d63c875 100644 --- a/src/gpu-compute/dispatcher.cc +++ b/src/gpu-compute/dispatcher.cc @@ -50,7 +50,8 @@ : SimObject(p), shader(nullptr), gpuCmdProc(nullptr), tickEvent([this]{ exec(); }, "GPU Dispatcher tick", false, Event::CPU_Tick_Pri), - dispatchActive(false), stats(this) + dispatchActive(false), kernelExitEvents(p.kernel_exit_events), + stats(this) { schedule(&tickEvent, 0); } @@ -330,6 +331,10 @@ DPRINTF(GPUWgLatency, "Kernel Complete ticks:%d kernel:%d\n", curTick(), kern_id); DPRINTF(GPUKernelInfo, "Completed kernel %d\n", kern_id); + + if (kernelExitEvents) { + exitSimLoop("GPU Kernel Completed"); + } } if (!tickEvent.scheduled()) { diff --git a/src/gpu-compute/dispatcher.hh b/src/gpu-compute/dispatcher.hh index 7699cef..eafa080 100644 --- a/src/gpu-compute/dispatcher.hh +++ b/src/gpu-compute/dispatcher.hh @@ -92,6 +92,8 @@ std::queue<int> doneIds; // is there a kernel in execution? bool dispatchActive; + // Enable exiting sim loop after each kernel completion + bool kernelExitEvents; protected: struct GPUDispatcherStats : public statistics::Group -- To view, visit https://gem5-review.googlesource.com/c/public/gem5/+/72138?usp=email To unsubscribe, or for help writing mail filters, visit https://gem5-review.googlesource.com/settings?usp=email Gerrit-MessageType: merged Gerrit-Project: public/gem5 Gerrit-Branch: release-staging-v23-0 Gerrit-Change-Id: I1d2c082291fdbcf27390913ffdffb963ec8080dd Gerrit-Change-Number: 72138 Gerrit-PatchSet: 3 Gerrit-Owner: Matthew Poremba <matthew.poremba@amd.com> Gerrit-Reviewer: Bobby Bruce <bbruce@ucdavis.edu> Gerrit-Reviewer: Jason Lowe-Power <jason@lowepower.com> Gerrit-Reviewer: kokoro <noreply+kokoro@google.com> Gerrit-CC: kokoro <noreply+kokoro@google.com>