aboutsummaryrefslogtreecommitdiff
path: root/crosperf/experiment.py
diff options
context:
space:
mode:
Diffstat (limited to 'crosperf/experiment.py')
-rw-r--r--crosperf/experiment.py51
1 files changed, 41 insertions, 10 deletions
diff --git a/crosperf/experiment.py b/crosperf/experiment.py
index 9f88ed01..59e932f6 100644
--- a/crosperf/experiment.py
+++ b/crosperf/experiment.py
@@ -10,6 +10,7 @@ import os
import time
import afe_lock_machine
+from threading import Lock
from utils import logger
from utils import misc
@@ -79,6 +80,15 @@ class Experiment(object):
self.start_time = None
self.benchmark_runs = self._GenerateBenchmarkRuns()
+ self._schedv2 = None
+ self._internal_counter_lock = Lock()
+
+ def set_schedv2(self, schedv2):
+ self._schedv2 = schedv2
+
+ def schedv2(self):
+ return self._schedv2
+
def _GenerateBenchmarkRuns(self):
"""Generate benchmark runs from labels and benchmark defintions."""
benchmark_runs = []
@@ -109,12 +119,17 @@ class Experiment(object):
pass
def Terminate(self):
- for t in self.benchmark_runs:
- if t.isAlive():
- self.l.LogError("Terminating run: '%s'." % t.name)
- t.Terminate()
+ if self._schedv2 is not None:
+ self._schedv2.terminate()
+ else:
+ for t in self.benchmark_runs:
+ if t.isAlive():
+ self.l.LogError("Terminating run: '%s'." % t.name)
+ t.Terminate()
def IsComplete(self):
+ if self._schedv2:
+ return self._schedv2.is_complete()
if self.active_threads:
for t in self.active_threads:
if t.isAlive():
@@ -127,14 +142,30 @@ class Experiment(object):
return False
return True
+ def BenchmarkRunFinished(self, br):
+ """Update internal counters after br finishes.
+
+ Note this is only used by schedv2 and is called by multiple threads.
+ Never throw any exception here.
+ """
+
+ assert self._schedv2 is not None
+ with self._internal_counter_lock:
+ self.num_complete += 1
+ if not br.cache_hit:
+ self.num_run_complete += 1
+
def Run(self):
self.start_time = time.time()
- self.active_threads = []
- for benchmark_run in self.benchmark_runs:
- # Set threads to daemon so program exits when ctrl-c is pressed.
- benchmark_run.daemon = True
- benchmark_run.start()
- self.active_threads.append(benchmark_run)
+ if self._schedv2 is not None:
+ self._schedv2.run_sched()
+ else:
+ self.active_threads = []
+ for benchmark_run in self.benchmark_runs:
+ # Set threads to daemon so program exits when ctrl-c is pressed.
+ benchmark_run.daemon = True
+ benchmark_run.start()
+ self.active_threads.append(benchmark_run)
def SetCacheConditions(self, cache_conditions):
for benchmark_run in self.benchmark_runs: