1111import benchmarks
1212from artefacts import *
1313
14+ REBENCH_DATA = "results.data"
15+
1416HS_MAP = {
1517 "ripgrep" : {
1618 "heapsize-s" : "32M" ,
@@ -236,11 +238,11 @@ def _missing_(cls, value):
236238 exp = cls .__name__ .lower ()
237239
238240 for member in cls :
239- if f"{ exp } - rc" in value :
241+ if f"rc" in value :
240242 return cls .RC
241- elif f"{ exp } - arc" in value :
243+ elif f"arc" in value :
242244 return cls .RC
243- elif f"{ exp } - { member .value } " in value :
245+ elif f"{ member .value } " in value :
244246 return member
245247 elif "default" in value :
246248 return cls .GC
@@ -270,17 +272,16 @@ class PremOpt(ExperimentProfile):
270272 @classmethod
271273 @property
272274 def measurements (cls ):
273- return [Measurement .PERF , Measurement .METRICS ]
275+ return [Measurement .PERF , Measurement .METRICS , Measurement . HEAPTRACK ]
274276
275277 @classmethod
276278 def _missing_ (cls , value ):
277- exp = cls .__name__ .lower ()
278-
279- for member in cls :
280- if f"{ exp } -{ member .value } " in value :
281- return member
282- elif "default" in value :
283- return cls .OPT
279+ if value == "default" :
280+ return cls .OPT
281+ else :
282+ for member in cls :
283+ if member .value in value :
284+ return member
284285 return None
285286
286287 @property
@@ -444,13 +445,6 @@ def __repr__(self):
444445 def latex (self ) -> str :
445446 return f"\\ { self .name .replace ('-' ,'' )} "
446447
447- @property
448- def results (self ):
449- from results import SuiteData
450-
451- results = SuiteData (self )
452- return results
453-
454448 def raw_data (self , measurement ) -> Path :
455449 return RESULTS_DIR / self .name / measurement .value / "results.data"
456450
@@ -890,9 +884,7 @@ def gauge_adapter(self) -> str:
890884 return {"AlloyAdapter" : "alloy_adapter.py" }
891885
892886 def run (self , c , pexecs , config ):
893- self .results .parent .mkdir (parents = True , exist_ok = True )
894- if self .measurement == Measurement .HEAPTRACK :
895- (self .results .parent / "heaptrack" ).mkdir (parents = True , exist_ok = True )
887+ self .results_dir .mkdir (parents = True , exist_ok = True )
896888
897889 rebench_cmd = [
898890 str (REBENCH_EXEC ),
@@ -937,8 +929,20 @@ def configurations(self, only_installed=False, only_missing=False):
937929 return executors
938930
939931 @property
940- def results (self ) -> Path :
941- return RESULTS_DIR / self .suite .name / self .measurement .value / "results.data"
932+ def results_dir (self ) -> Path :
933+ return RESULTS_DIR / self .suite .name / self .measurement .value
934+
935+ @property
936+ def results (self ) -> [Path ]:
937+
938+ if self .measurement == Measurement .PERF :
939+ return {self .results_dir / REBENCH_DATA }
940+ else :
941+ return set (
942+ f
943+ for f in self .results_dir .rglob ("*" )
944+ if f .name != REBENCH_DATA and not f .is_dir ()
945+ )
942946
943947 @property
944948 def experiment (self ):
@@ -947,6 +951,10 @@ def experiment(self):
947951 assert all ([x .experiment == expected for x in self .profiles ])
948952 return self .profiles [0 ].experiment
949953
954+ @property
955+ def profile_class (self ):
956+ return self .profiles [0 ].__class__
957+
950958 @property
951959 def name (self ) -> str :
952960 return f"{ self .suite .name } -{ self .experiment } -{ self .measurement .value } "
@@ -996,16 +1004,17 @@ def bin(self) -> str:
9961004
9971005 @property
9981006 def run_env (self ):
999- libgc = str ( cfg . alloy . install_prefix / "lib" / " libgc.so" )
1007+ libgc = Path ( "/home/jake/research/bdwgc/out/ libgc.so" )
10001008 env = {
10011009 "DISPLAY" : ":99" ,
1002- "LD_PRELOAD" : libgc ,
1010+ "LD_PRELOAD" : str ( libgc ) ,
10031011 }
1012+ env ["RESULTS_DIR" ] = str (self .results_dir )
1013+ env ["HT_PATH" ] = str (HEAPTRACK .path )
1014+ if self .metric == Measurement .HEAPTRACK :
1015+ env ["USE_HT" ] = "true"
10041016 if self .metric == Measurement .METRICS :
1005- env ["GC_LOG_DIR" ] = str (self .metrics_data )
1006- elif self .metric == Measurement .HEAPTRACK :
1007- env ["GC_HEAPTRACK_DIR" ] = str (self .heaptrack_dir )
1008- env ["HEAPTRACK_PATH" ] = str (HEAPTRACK .path )
1017+ env ["USE_MT" ] = "true"
10091018
10101019 if self .id == "heapsize-s" :
10111020 env ["GC_INITIAL_HEAP_SIZE" ] = HS_MAP [self .suite .name ]["heapsize-s" ]
@@ -1023,12 +1032,10 @@ def run_env(self):
10231032 return env
10241033
10251034 @property
1026- def metrics_data (self ) -> Path :
1027- return self .experiment .results .parent / f"{ self .id } "
1028-
1029- @property
1030- def heaptrack_dir (self ) -> Path :
1031- return self .experiment .results .parent / self .id
1035+ def results_dir (self ) -> Path :
1036+ dir = self .experiment .results_dir / self .id
1037+ dir .mkdir (parents = True , exist_ok = True )
1038+ return dir
10321039
10331040 @property
10341041 def build_dir (self ) -> Path :
@@ -1101,7 +1108,7 @@ def run(self, c, pexecs):
11011108
11021109 def remove (self ):
11031110 for e in self .experiments :
1104- e .results .unlink (missing_ok = True )
1111+ e .results_dir .unlink (missing_ok = True )
11051112
11061113 def alloy_variants (self , only_installed = False , only_missing = False ):
11071114 l = [cfg .alloy for cfg in self .configurations ()]
@@ -1144,7 +1151,7 @@ def config(self) -> Path:
11441151 "executions" : [
11451152 cfg .rebench_name for cfg in executors if cfg .experiment == e
11461153 ],
1147- "data_file" : str (e .results ),
1154+ "data_file" : str (e .results_dir / REBENCH_DATA ),
11481155 }
11491156
11501157 bm_part [e .suite .name ] = {
@@ -1190,6 +1197,13 @@ def all(cls, pexecs: int = 30) -> "Experiments":
11901197 profiles = [GCVS , PremOpt , Elision , HeapSize ]
11911198 return cls (pexecs , [e for p in profiles for e in p .experiments (pexecs )])
11921199
1200+ @property
1201+ def results (self ):
1202+ results = set ()
1203+ for e in self .experiments :
1204+ results .update (e .results )
1205+ return results
1206+
11931207
11941208@dataclass
11951209class RebenchConfig :
0 commit comments