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

 (

13 is the latest approved patch-set.
No files were changed between the latest approved patch-set and the submitted one.
 )Change subject: stdlib: Update LoopPointRestore to take singular region_id
......................................................................

stdlib: Update LoopPointRestore to take singular region_id

This change has been introduced as we only restore to one checkpoint at
a time. The change updates LoopPointRestore to take a sigular region_id
and use it to generate the LoopPpoint from the LoopPoint JSON file.

Change-Id: I0e88d5ba03b164bdd5da098397f44e16af591134
Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/67492
Reviewed-by: Bobby Bruce <bbr...@ucdavis.edu>
Maintainer: Bobby Bruce <bbr...@ucdavis.edu>
Tested-by: kokoro <noreply+kok...@google.com>
---
M src/python/gem5/utils/looppoint.py
1 file changed, 62 insertions(+), 66 deletions(-)

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




diff --git a/src/python/gem5/utils/looppoint.py b/src/python/gem5/utils/looppoint.py
index d1851a8..8e01e30 100644
--- a/src/python/gem5/utils/looppoint.py
+++ b/src/python/gem5/utils/looppoint.py
@@ -28,7 +28,7 @@
 from m5.util import fatal
 from m5.params import PcCountPair
 from pathlib import Path
-from typing import List, Dict
+from typing import List, Dict, Tuple
 from gem5.components.processors.abstract_processor import AbstractProcessor
 from m5.objects import PcCountTrackerManager
 import csv
@@ -330,76 +330,55 @@


 class LoopPointRestore(LoopPoint):
- def __init__(self, looppoint_file: Path, checkpoint_path: Path) -> None:
+    def __init__(self, looppoint_file: Path, region_id: int) -> None:
         """
- This class is specifically designed to take in the LoopPoint data file and
-        generator information needed to restore a checkpoint taken by the
+ This class is specifically designed to take in the LoopPoint data file + and generator information needed to restore a checkpoint taken by the
         LoopPointCheckPoint.
:param looppoint_file: a json file generated by gem5 that has all the
         LoopPoint data information
- :param checkpoint_path: the director of the checkpoint taken by the gem5
-        standard library looppoint_save_checkpoint_generator
-
+        :param region_id: The region ID we will be restoring to.
         """

-        _json_file = {}
-        _targets = []
-        _region_id = {}
-
-        self.profile_restore(
- looppoint_file, checkpoint_path, _targets, _json_file, _region_id
-        )
-
-        super().__init__(
-            _targets,
-            _region_id,
-            _json_file,
-        )
-
-    def profile_restore(
-        self,
-        looppoint_file_path: Path,
-        checkpoint_dir: Path,
-        targets: List[PcCountPair],
-        json_file: Dict[int, Dict],
-        region_id: Dict[PcCountPair, int],
-    ) -> None:
-        """
- This function is used to profile data from the LoopPoint data file to
-        information needed to restore the LoopPoint checkpoint
-        :param looppoint_file_path: the director of the LoopPoint data file
-        :param targets: a list of PcCountPair
-        :param json_file: a dictionary for all the LoopPoint data
- :param region_id: a dictionary for all the significant PcCountPair and
-        its corresponding region id
-        """
-        regex = re.compile(r"cpt.Region([0-9]+)")
-        rid = regex.findall(checkpoint_dir.as_posix())[0]
-        # finds out the region id from the directory name
-        with open(looppoint_file_path) as file:
+        with open(looppoint_file) as file:
             json_file = json.load(file)
-            if rid not in json_file:
- # if the region id does not exist in the LoopPoint data file
-                # raise a fatal message
-                fatal(f"{rid} is not a valid region\n")
-            region = json_file[rid]
-            if "warmup" in region:
-                if "relative" not in region["simulation"]["start"]:
- # if there are not relative counts for the PC Count pair - # then it means there is not enough information to restore
-                    # this checkpoint
- fatal(f"region {rid} doesn't have relative count info\n")
-                start = PcCountPair(
-                    region["simulation"]["start"]["pc"],
-                    region["simulation"]["start"]["relative"],
-                )
-                region_id[start] = rid
-                targets.append(start)
-            if "relative" not in region["simulation"]["end"]:
-                fatal(f"region {rid} doesn't have relative count info\n")
-            end = PcCountPair(
-                region["simulation"]["end"]["pc"],
-                region["simulation"]["end"]["relative"],
+
+        targets, regions = self.get_region(
+            json_file=json_file, region_id=region_id
+        )
+
+ super().__init__(targets=targets, regions=regions, json_file=json_file)
+
+    def get_region(
+        self, json_file: Dict[int, Dict], region_id: int
+    ) -> Tuple[List[PcCountPair], Dict[PcCountPair, int]]:
+        to_return_region = {}
+        to_return_targets = []
+
+        if region_id not in json_file:
+            # if the region id does not exist in the LoopPoint data
+            # file raise a fatal message
+            fatal(f"{region_id} is not a valid region\n")
+        region = json_file[region_id]
+        if "warmup" in region:
+            if "relative" not in region["simulation"]["start"]:
+                # if there are not relative counts for the PC Count
+                # pair then it means there is not enough information to
+                # restore this checkpoint
+ fatal(f"region {region_id} doesn't have relative count info\n")
+            start = PcCountPair(
+                region["simulation"]["start"]["pc"],
+                region["simulation"]["start"]["relative"],
             )
-            region_id[end] = rid
-            targets.append(end)
+            to_return_region[start] = region_id
+            to_return_targets.append(start)
+        if "relative" not in region["simulation"]["end"]:
+            fatal(f"region {region_id} doesn't have relative count info\n")
+        end = PcCountPair(
+            region["simulation"]["end"]["pc"],
+            region["simulation"]["end"]["relative"],
+        )
+        to_return_region[end] = region_id
+        to_return_targets.append(end)
+
+        return to_return_targets, to_return_region

--
To view, visit https://gem5-review.googlesource.com/c/public/gem5/+/67492?usp=email 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: I0e88d5ba03b164bdd5da098397f44e16af591134
Gerrit-Change-Number: 67492
Gerrit-PatchSet: 15
Gerrit-Owner: Bobby Bruce <bbr...@ucdavis.edu>
Gerrit-Reviewer: Bobby Bruce <bbr...@ucdavis.edu>
Gerrit-Reviewer: kokoro <noreply+kok...@google.com>
Gerrit-MessageType: merged
_______________________________________________
gem5-dev mailing list -- gem5-dev@gem5.org
To unsubscribe send an email to gem5-dev-le...@gem5.org

Reply via email to