Skip to content

Commit b7c958c

Browse files
committed
implement score calculation module (used for tune/sweep)
Signed-off-by: Jack Luar <jluar@precisioninno.com>
1 parent 0d6e7a3 commit b7c958c

2 files changed

Lines changed: 24 additions & 20 deletions

File tree

tools/AutoTuner/src/autotuner/distributed.py

Lines changed: 3 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -92,15 +92,15 @@
9292
read_config,
9393
read_metrics,
9494
prepare_ray_server,
95+
calculate_score,
96+
ERROR_METRIC,
9597
CONSTRAINTS_SDC,
9698
FASTROUTE_TCL,
9799
)
98100
from autotuner.tensorboard_logger import TensorBoardLogger
99101

100102
# Name of the final metric
101103
METRIC = "metric"
102-
# The worst of optimized metric
103-
ERROR_METRIC = 9e99
104104
# Path to the FLOW_HOME directory
105105
ORFS_FLOW_DIR = os.path.abspath(
106106
os.path.join(os.path.dirname(__file__), "../../../../flow")
@@ -173,16 +173,7 @@ def evaluate(self, metrics):
173173
It can change in any form to minimize the score (return value).
174174
Default evaluation function optimizes effective clock period.
175175
"""
176-
error = "ERR" in metrics.values()
177-
not_found = "N/A" in metrics.values()
178-
if error or not_found:
179-
return (ERROR_METRIC, "-", "-", "-")
180-
effective_clk_period = metrics["clk_period"] - metrics["worst_slack"]
181-
num_drc = metrics["num_drc"]
182-
gamma = effective_clk_period / 10
183-
score = effective_clk_period
184-
score = score * (100 / self.step_) + gamma * num_drc
185-
return (score, effective_clk_period, num_drc, metrics["die_area"])
176+
return calculate_score(metrics, step=self.step_)
186177

187178
def _is_valid_config(self, config):
188179
"""

tools/AutoTuner/src/autotuner/utils.py

Lines changed: 21 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,24 @@
6969
# Name of the TCL script run before routing
7070
FASTROUTE_TCL = "fastroute.tcl"
7171
DATE = datetime.now().strftime("%Y-%m-%d-%H-%M-%S")
72+
# The worst of optimized metric
73+
ERROR_METRIC = 9e99
74+
75+
76+
def calculate_score(metrics, step=1):
77+
"""Calculate optimization score from metrics."""
78+
error = "ERR" in metrics.values()
79+
not_found = "N/A" in metrics.values()
80+
81+
if error or not_found:
82+
return (ERROR_METRIC, "-", "-", "-")
83+
84+
effective_clk_period = metrics["clk_period"] - metrics["worst_slack"]
85+
num_drc = metrics["num_drc"]
86+
gamma = effective_clk_period / 10
87+
score = effective_clk_period * (100 / step) + gamma * num_drc
88+
89+
return (score, effective_clk_period, num_drc, metrics["die_area"])
7290

7391

7492
def write_sdc(variables, path, sdc_original, constraints_sdc):
@@ -708,21 +726,16 @@ def consumer(queue):
708726
print(f"[INFO TUN-0008] Finished run for parameter {config}.")
709727

710728
metrics = read_metrics(metric_file, args.stop_stage)
711-
effective_clk_period = (
712-
metrics["clk_period"] - metrics["worst_slack"]
713-
if metrics["worst_slack"] not in ("ERR", "N/A")
714-
else "-"
715-
)
716-
score = effective_clk_period if effective_clk_period != "-" else 999999.0
729+
score, effective_clk_period, num_drc, die_area = calculate_score(metrics)
717730

718731
ray.get(
719732
tb_logger.log_sweep_metrics.remote(
720733
params=config,
721734
metrics=metrics,
722735
score=score,
723736
effective_clk_period=effective_clk_period,
724-
num_drc=metrics.get("num_drc", "-"),
725-
die_area=metrics.get("die_area", "-"),
737+
num_drc=num_drc,
738+
die_area=die_area,
726739
)
727740
)
728741

0 commit comments

Comments
 (0)