提交 371f7fcb authored 作者: Frederic's avatar Frederic

refresh less frequently. This speed up CPU test with empty cache by 17%!

上级 2f82eef2
......@@ -1092,24 +1092,13 @@ class FunctionMaker(object):
raise TypeError(
'profile passed via both "mode" and "profile" arguments')
self.profile = profile = profile or mode_profile
if profile or theano.config.cxx:
if profile:
# This is very important:
# 1) We preload the cache here to don't have its timming
# included in optimization that compile function.
# 2) If other repo that import Theano have Theano ops defined,
# we need to refresh the cache here. Otherwise, there are import
# order problems.
# When device=gpu, we compile during Theano
# import. This triggers the loading of the cache. But
# unpickling the cache asks that the external Ops are
# completly loaded, which isn't always the case!
# If a module isn't completly loaded and its unpickling
# fails, it means it is safe for this function
# compilation to skip them, but not for future
# compilations. So reloading the cache at each
# compilation fixes this problem.
# 3) This helps propagate knowledge of newly compiled modules to
# concurrent processes.
# 2) Do not refresh the cache here by default. It cause too much
# execution time during testing as we compile much more functions
# then the number of compile c module.
theano.gof.cc.get_module_cache().refresh()
# Handle the case where inputs and/or outputs is a single
# Variable (not in a list)
......
......@@ -1056,8 +1056,20 @@ class ModuleCache(object):
return module
with compilelock.lock_ctx(keep_lock=keep_lock):
# Maybe somebody else compiled it for us while we
# where waiting for the lock. Try to load it again
# 1) Maybe somebody else compiled it for us while we
# where waiting for the lock. Try to load it again.
# 2) If other repo that import Theano have Theano ops defined,
# we need to refresh the cache here. Otherwise, there are import
# order problems.
# When device=gpu, we compile during Theano
# import. This triggers the loading of the cache. But
# unpickling the cache asks that the external Ops are
# completly loaded, which isn't always the case!
# If a module isn't completly loaded and its unpickling
# fails, it means it is safe for this function
# compilation to skip them, but not for future
# compilations. So reloading the cache here
# compilation fixes this problem. (we could do that only once)
self.refresh(cleanup=False)
module = self._get_from_key(key)
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论