From 36e5feb0defe70c55f7d58f15bcb04348ce6b15a Mon Sep 17 00:00:00 2001 From: "Bobby R. Bruce" Date: Thu, 13 Oct 2022 14:24:06 -0700 Subject: [PATCH] stdlib: add 'get_simpoint' function to se_binary_workload.py This function is necessary to obtain the workload from a board once set. This is a stop-gap solution to get SimPoints working with SE workloads but will need revision when implementing this functionality for FS. Change-Id: Ided2b1a5867655a98730879524e0be61c3f20295 Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/64551 Maintainer: Bobby Bruce Tested-by: kokoro Reviewed-by: Melissa Jost --- .../checkpoints/simpoints-se-restore.py | 6 ++++-- .../gem5/components/boards/se_binary_workload.py | 16 +++++++++++++--- 2 files changed, 17 insertions(+), 5 deletions(-) diff --git a/configs/example/gem5_library/checkpoints/simpoints-se-restore.py b/configs/example/gem5_library/checkpoints/simpoints-se-restore.py index 82b56b59b9..aacddd7e31 100644 --- a/configs/example/gem5_library/checkpoints/simpoints-se-restore.py +++ b/configs/example/gem5_library/checkpoints/simpoints-se-restore.py @@ -129,7 +129,9 @@ def max_inst(): print("end of warmup, starting to simulate SimPoint") warmed_up = True # Schedule a MAX_INSTS exit event during the simulation - simulator.schedule_max_insts(simpoint.get_simpoint_interval()) + simulator.schedule_max_insts( + board.get_simpoint().get_simpoint_interval() + ) dump() reset() yield False @@ -146,5 +148,5 @@ simulator = Simulator( # is greater than 0. # In here, it schedules an exit event for the first SimPoint's warmup # instructions -simulator.schedule_max_insts(simpoint.get_warmup_list()[0], True) +simulator.schedule_max_insts(board.get_simpoint().get_warmup_list()[0], True) simulator.run() diff --git a/src/python/gem5/components/boards/se_binary_workload.py b/src/python/gem5/components/boards/se_binary_workload.py index 545dc40a39..7713b11f65 100644 --- a/src/python/gem5/components/boards/se_binary_workload.py +++ b/src/python/gem5/components/boards/se_binary_workload.py @@ -123,15 +123,16 @@ class SEBinaryWorkload: # convert input to SimPoint if necessary if isinstance(simpoint, AbstractResource): - simpoint_object = SimPoint(simpoint) + self._simpoint_object = SimPoint(simpoint) else: assert isinstance(simpoint, SimPoint) - simpoint_object = simpoint + self._simpoint_object = simpoint if self.get_processor().get_num_cores() > 1: warn("SimPoints only works with one core") self.get_processor().get_cores()[0].set_simpoint( - inst_starts=simpoint_object.get_simpoint_start_insts(), init=True + inst_starts=self._simpoint_object.get_simpoint_start_insts(), + init=True, ) # Call set_se_binary_workload after SimPoint setup is complete @@ -139,3 +140,12 @@ class SEBinaryWorkload: binary=binary, arguments=arguments, ) + + def get_simpoint(self) -> SimPoint: + """ + Returns the SimPoint object set. If no SimPoint object has been set an + exception is thrown. + """ + if getattr(self, "_simpoint_object", None): + return self._simpoint_object + raise Exception("This board does not have a simpoint set.")