aboutsummaryrefslogtreecommitdiff
path: root/bestflags/executor.py
diff options
context:
space:
mode:
Diffstat (limited to 'bestflags/executor.py')
-rw-r--r--bestflags/executor.py64
1 files changed, 64 insertions, 0 deletions
diff --git a/bestflags/executor.py b/bestflags/executor.py
new file mode 100644
index 00000000..91dd9288
--- /dev/null
+++ b/bestflags/executor.py
@@ -0,0 +1,64 @@
+"""The Execution stage of the framework.
+
+Execute the image against a set of benchmarks. This stage sets up a number of
+processes, calls the actual execute method and caches the results.
+"""
+
+__author__ = 'yuhenglong@google.com (Yuheng Long)'
+
+import multiprocessing
+
+
+class Tester(object):
+ """Execute the generated images against a set of benchmark applications."""
+
+ def __init__(self, numProcess, costs):
+ """Set up the process pool and the results cached.
+
+ Args:
+ numProcess: Maximum number of execution to run in parallel
+ costs: Executions that have been benchmarked before
+ """
+
+ self._pool = multiprocessing.Pool(numProcess)
+ self._costs = costs
+
+ def _set_cost(self, image, cost):
+ """Record the execution result for the current image.
+
+ Args:
+ image: The input image for the execution
+ cost: the time it takes to execute the image
+ """
+
+ pass
+
+ def _execute(self, task):
+ """Execute the benchmarks on task.
+
+ The concrete subclass should implement the actual execution.
+
+ Args:
+ task: The input task for the execution
+ """
+ # raise Exception('Must be implemented in child class')
+ pass
+
+ def _execute_task(self, task):
+ """Execute the input task and record the cost.
+
+ Args:
+ task: The task to be compiled
+ """
+ pass
+
+ def execute(self, generation):
+ """Execute the image for all entities in a generation.
+
+ Call them in parallel in processes.
+
+ Args:
+ generation: A new generation to be executed.
+ """
+
+ self._pool.map(self._execute_task, generation.task, 1)