提交 9e8a3263 authored 作者: Frederic's avatar Frederic

Fix crash during printing of the profiler of optimizer.

上级 8c30d10a
...@@ -1424,15 +1424,12 @@ class EquilibriumOptimizer(NavigatorOptimizer): ...@@ -1424,15 +1424,12 @@ class EquilibriumOptimizer(NavigatorOptimizer):
loop_timing = [] loop_timing = []
global_opt_timing = [] global_opt_timing = []
time_lopts = {} time_opts = {}
io_toposort_timing = [] io_toposort_timing = []
nb_nodes = [] nb_nodes = []
for gopt in self.global_optimizers: for opt in self.global_optimizers + self.local_optimizers:
process_count.setdefault(gopt, 0) process_count.setdefault(opt, 0)
time_opts.setdefault(opt, 0)
for lopt in self.local_optimizers:
process_count.setdefault(lopt, 0)
time_lopts.setdefault(lopt, 0)
while changed and not max_use_abort: while changed and not max_use_abort:
t0 = time.time() t0 = time.time()
...@@ -1441,7 +1438,9 @@ class EquilibriumOptimizer(NavigatorOptimizer): ...@@ -1441,7 +1438,9 @@ class EquilibriumOptimizer(NavigatorOptimizer):
#apply global optimizers #apply global optimizers
for gopt in self.global_optimizers: for gopt in self.global_optimizers:
fgraph.change_tracker.reset() fgraph.change_tracker.reset()
t_opt = time.time()
gopt.apply(fgraph) gopt.apply(fgraph)
time_opts[gopt] += time.time() - t_opt
if fgraph.change_tracker.changed: if fgraph.change_tracker.changed:
process_count[gopt] += 1 process_count[gopt] += 1
changed = True changed = True
...@@ -1482,9 +1481,9 @@ class EquilibriumOptimizer(NavigatorOptimizer): ...@@ -1482,9 +1481,9 @@ class EquilibriumOptimizer(NavigatorOptimizer):
current_node = node current_node = node
for lopt in self.local_optimizers: for lopt in self.local_optimizers:
t_lopt = time.time() t_opt = time.time()
lopt_change = self.process_node(fgraph, node, lopt) lopt_change = self.process_node(fgraph, node, lopt)
time_lopts[lopt] += time.time() - t_lopt time_opts[lopt] += time.time() - t_opt
if lopt_change: if lopt_change:
process_count[lopt] += 1 process_count[lopt] += 1
changed = True changed = True
...@@ -1507,7 +1506,7 @@ class EquilibriumOptimizer(NavigatorOptimizer): ...@@ -1507,7 +1506,7 @@ class EquilibriumOptimizer(NavigatorOptimizer):
config.optdb.max_use_ratio) config.optdb.max_use_ratio)
return (self, loop_timing, process_count, max_nb_nodes, return (self, loop_timing, process_count, max_nb_nodes,
global_opt_timing, nb_nodes, time_lopts, io_toposort_timing) global_opt_timing, nb_nodes, time_opts, io_toposort_timing)
def print_summary(self, stream=sys.stdout, level=0, depth=-1): def print_summary(self, stream=sys.stdout, level=0, depth=-1):
name = getattr(self, 'name', None) name = getattr(self, 'name', None)
...@@ -1521,7 +1520,7 @@ class EquilibriumOptimizer(NavigatorOptimizer): ...@@ -1521,7 +1520,7 @@ class EquilibriumOptimizer(NavigatorOptimizer):
@staticmethod @staticmethod
def print_profile(stream, prof, level=0): def print_profile(stream, prof, level=0):
(opt, loop_timing, process_count, max_nb_nodes, (opt, loop_timing, process_count, max_nb_nodes,
global_opt_timing, nb_nodes, time_lopts, io_toposort_timing) = prof global_opt_timing, nb_nodes, time_opts, io_toposort_timing) = prof
blanc = (' ' * level) blanc = (' ' * level)
print >> stream, blanc, "EquilibriumOptimizer", print >> stream, blanc, "EquilibriumOptimizer",
print >> stream, blanc, getattr(opt, "name", print >> stream, blanc, getattr(opt, "name",
...@@ -1540,7 +1539,7 @@ class EquilibriumOptimizer(NavigatorOptimizer): ...@@ -1540,7 +1539,7 @@ class EquilibriumOptimizer(NavigatorOptimizer):
count_opt = [] count_opt = []
for opt, count in process_count.iteritems(): for opt, count in process_count.iteritems():
if count > 0: if count > 0:
count_opt.append((time_lopts[opt], count, opt)) count_opt.append((time_opts[opt], count, opt))
if count_opt: if count_opt:
print >> stream, blanc, \ print >> stream, blanc, \
...@@ -1554,7 +1553,7 @@ class EquilibriumOptimizer(NavigatorOptimizer): ...@@ -1554,7 +1553,7 @@ class EquilibriumOptimizer(NavigatorOptimizer):
@staticmethod @staticmethod
def merge_profile(prof1, prof2): def merge_profile(prof1, prof2):
#(opt, loop_timing, process_count, max_nb_nodes, #(opt, loop_timing, process_count, max_nb_nodes,
# global_opt_timing, nb_nodes, time_lopts, io_toposort_timing) = prof1 # global_opt_timing, nb_nodes, time_opts, io_toposort_timing) = prof1
local_optimizers = set(prof1[0].local_optimizers).union( local_optimizers = set(prof1[0].local_optimizers).union(
prof2[0].local_optimizers) prof2[0].local_optimizers)
...@@ -1588,12 +1587,12 @@ class EquilibriumOptimizer(NavigatorOptimizer): ...@@ -1588,12 +1587,12 @@ class EquilibriumOptimizer(NavigatorOptimizer):
nb_nodes = merge_list(prof1[5], prof2[5]) nb_nodes = merge_list(prof1[5], prof2[5])
time_lopts = prof1[6].copy() time_opts = prof1[6].copy()
for opt, t in prof2[6].iteritems(): for opt, t in prof2[6].iteritems():
if opt in time_lopts: if opt in time_opts:
time_lopts[opt] += t time_opts[opt] += t
else: else:
time_lopts[opt] = t time_opts[opt] = t
io_toposort_timing = merge_list(prof1[7], prof2[7]) io_toposort_timing = merge_list(prof1[7], prof2[7])
...@@ -1606,7 +1605,7 @@ class EquilibriumOptimizer(NavigatorOptimizer): ...@@ -1606,7 +1605,7 @@ class EquilibriumOptimizer(NavigatorOptimizer):
max_nb_nodes, max_nb_nodes,
global_opt_timing, global_opt_timing,
nb_nodes, nb_nodes,
time_lopts, time_opts,
io_toposort_timing) io_toposort_timing)
################# #################
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论