added profile linker

上级 b7c8449c
import time
import gof import gof
import core
import opt import opt
from copy import copy from copy import copy
#prog(inputs, outputs) class profile_linker:
#single(*outputs) def __init__(self, env):
#multi(*output_lists) self.order = env.toposort()
self.thunks = [op._perform for op in self.order]
self.n_calls = 0
self.times = [0.0 for op in self.order]
def __call__(self):
for i, thunk in enumerate(self.thunks):
start_time = time.time()
thunk()
self.times[i] += time.time() - start_time
self.n_calls += 1
def dump(self):
total_time = sum(self.times)
print self.n_calls, 'calls took', total_time, 'seconds'
print 'Proportion of CPU per op'
for op, t in zip(self.order, self.times):
s_op = str(op).split()[0][1:]
print " %-35s %4.5f"% (s_op, t/total_time)
print 'Proportion of CPU per op class'
dct = {}
for op, t in zip(self.order, self.times):
s_op = str(op).split()[0][1:]
dct[s_op] = dct.get(s_op, 0.0) + t
for t, s_op in reversed(sorted([(t,op) for op, t in dct.items()])):
print " %-35s %4.5f"% (s_op, t/total_time)
import core
class prog(gof.Prog): class prog(gof.Prog):
def __init__(self, inputs, outputs, optimizer = opt.optimizer([])): def __init__(self, inputs, outputs, optimizer = opt.optimizer([]), linker =
gof.link.perform_linker):
"""Compile a subgraph. """Compile a subgraph.
N.B. This triggers computation of the subgraph leading to the outputs N.B. This triggers computation of the subgraph leading to the outputs
...@@ -26,7 +56,7 @@ class prog(gof.Prog): ...@@ -26,7 +56,7 @@ class prog(gof.Prog):
inputs, inputs,
outputs, outputs,
optimizer, optimizer,
gof.link.perform_linker, linker,
[]) [])
self.compute_orphans() self.compute_orphans()
...@@ -65,6 +95,6 @@ def to_func(inputs, outputs): ...@@ -65,6 +95,6 @@ def to_func(inputs, outputs):
return outputs return outputs
return f return f
def single(*outputs): def single(*outputs, **kwargs):
return prog(gof.graph.inputs(outputs), outputs) return prog(gof.graph.inputs(outputs), outputs, **kwargs)
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论