提交 304cbe3f authored 作者: Frederic Bastien's avatar Frederic Bastien

lower profiler overhead.

上级 89575768
...@@ -7,6 +7,7 @@ from theano.gof.cc import OpWiseCLinker ...@@ -7,6 +7,7 @@ from theano.gof.cc import OpWiseCLinker
from theano.gof.python25 import any from theano.gof.python25 import any
from theano import gof from theano import gof
from theano.configparser import config, AddConfigVar, IntParam from theano.configparser import config, AddConfigVar, IntParam
from theano.compile.function_module import FunctionMaker
import_time = time.time() import_time = time.time()
...@@ -18,6 +19,17 @@ AddConfigVar('ProfileMode.n_ops_to_print', ...@@ -18,6 +19,17 @@ AddConfigVar('ProfileMode.n_ops_to_print',
"Number of ops to print by default", "Number of ops to print by default",
IntParam(20, lambda i: i > 0)) IntParam(20, lambda i: i > 0))
class Profile_Maker(FunctionMaker):
def create(self, input_storage=None, trustme=False):
ret = super(Profile_Maker,self).create(input_storage, trustme)
for i, node in enumerate(ret.maker.env.toposort()):
self.mode.apply_time[(i,node.op)]=0.0
self.mode.apply_call[(i,node.op)]=0
self.mode.op_time[node.op]=0.
# self.mode.op_cimpl[node.op] =
self.mode.op_call[node.op] = 0
return ret
class ProfileMode(Mode): class ProfileMode(Mode):
def __init__(self, linker=default_linker, optimizer=default_optimizer): def __init__(self, linker=default_linker, optimizer=default_optimizer):
...@@ -36,6 +48,12 @@ class ProfileMode(Mode): ...@@ -36,6 +48,12 @@ class ProfileMode(Mode):
op_time, op_cimpl, op_call, op_time, op_cimpl, op_call,
compile_time, fct_call_time, fct_call)) compile_time, fct_call_time, fct_call))
def function_maker(self, i,o,m, *args, **kwargs):
"""Return an instance of `Profiler_Maker` which init the count"""
assert m is self
return Profile_Maker(i, o, self, *args, **kwargs)
def __getstate__(self): def __getstate__(self):
#print "__getstate__",self.provided_linker,self.provided_optimizer #print "__getstate__",self.provided_linker,self.provided_optimizer
return (self.provided_linker, self.provided_optimizer, self.local_time, return (self.provided_linker, self.provided_optimizer, self.local_time,
...@@ -72,11 +90,11 @@ class ProfileMode(Mode): ...@@ -72,11 +90,11 @@ class ProfileMode(Mode):
dt = time.time() - t0 dt = time.time() - t0
local_time[0] += dt local_time[0] += dt
apply_time[(i,node.op)] = apply_time.get((i,node.op), 0.0) + dt apply_time[(i,node.op)] += dt
apply_call[(i,node.op)] = apply_call.get((i,node.op), 0) + 1 apply_call[(i,node.op)] += 1
op_time[node.op] = op_time.get(node.op, 0.0) + dt op_time[node.op] += dt
op_cimpl[node.op] = hasattr(th, 'cthunk') op_cimpl[node.op] = hasattr(th, 'cthunk')
op_call[node.op] = op_call.get(node.op,0) + 1 op_call[node.op] += 1
self.provided_linker = linker self.provided_linker = linker
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论