提交 7b51cfba authored 作者: Pascal Lamblin's avatar Pascal Lamblin

Limit number calls to global optimizers

It helps locating infinite loops
上级 ec3726ed
...@@ -1411,7 +1411,8 @@ class EquilibriumOptimizer(NavigatorOptimizer): ...@@ -1411,7 +1411,8 @@ class EquilibriumOptimizer(NavigatorOptimizer):
max_use_abort = False max_use_abort = False
opt_name = None opt_name = None
process_count = {} process_count = {}
max_nb_nodes = 0 max_nb_nodes = len(fgraph.apply_nodes)
max_use = max_nb_nodes * self.max_use_ratio
loop_timing = [] loop_timing = []
global_opt_timing = [] global_opt_timing = []
...@@ -1422,16 +1423,24 @@ class EquilibriumOptimizer(NavigatorOptimizer): ...@@ -1422,16 +1423,24 @@ class EquilibriumOptimizer(NavigatorOptimizer):
process_count.setdefault(lopt, 0) process_count.setdefault(lopt, 0)
time_lopts.setdefault(lopt, 0) time_lopts.setdefault(lopt, 0)
for gopt in self.global_optimizers:
process_count.setdefault(gopt, 0)
while changed and not max_use_abort: while changed and not max_use_abort:
t0 = time.time() t0 = time.time()
changed = False changed = False
#apply global optimizer #apply global optimizers
fgraph.change_tracker.reset()
for gopt in self.global_optimizers: for gopt in self.global_optimizers:
fgraph.change_tracker.reset()
gopt.apply(fgraph) gopt.apply(fgraph)
if fgraph.change_tracker.changed: if fgraph.change_tracker.changed:
changed = True process_count[gopt] += 1
changed = True
if process_count[gopt] > max_use:
max_use_abort = True
opt_name = (getattr(gopt, "name", None)
or getattr(gopt, "__name__", ""))
global_opt_timing.append(float(time.time() - t0)) global_opt_timing.append(float(time.time() - t0))
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论