提交 dff74dc7 authored 作者: lamblin's avatar lamblin

Merge pull request #585 from nouiz/cache

Cache
......@@ -57,6 +57,12 @@ New Features
* "CudaNdarray[*] += ndarray" work in more case (Frederic B.)
* We add dimensions to CudaNdarray to automatically broadcast more frequently.
(Frederic B.)
* theano.tensor.argsort that wrap numpy.argsort (Hani Almousli).
* New theano flag cmodule.warn_no_version. Default False. If True,
will print a warning when compiling one or more Op with c code that
can't be cached as there is no c_code_cache_version() function to at
least of of those Ops. (Frederic B.)
* CPU alloc now always generate c code (Pascal L.)
Sparse
* Implement theano.sparse.mul(sparse1, sparse2) when both inputs don't
......
......@@ -537,3 +537,18 @@ import theano and print the config variable, as in:
optimization and this class. This list is sorted from the sub
optimization that takes the most time to the optimization that takes
the least time.
.. attribute:: config.cmodule.warn_no_version
Bool value, default: False
If True, will print a warning when compiling one or more Op with c
code that can't be cached as there is no c_code_cache_version()
function to at least of of those Ops.
.. attribute:: config.cmodule.mac_framework_link
Bool value, default: False
If set to True, breaks certain mac installations with the infamous
Bus Error.
......@@ -18,6 +18,8 @@ import distutils.sysconfig
import numpy.distutils # TODO: TensorType should handle this
import theano
from theano.gof.utils import flatten
from theano.configparser import config
from theano.gof.cc import hash_from_code
......@@ -26,9 +28,14 @@ import compilelock
from theano.configparser import AddConfigVar, BoolParam
AddConfigVar('cmodule.mac_framework_link',
("If set to true, breaks certain mac installations with the infamous "
("If set to True, breaks certain mac installations with the infamous "
"Bus Error"),
BoolParam(False))
AddConfigVar('cmodule.warn_no_version',
"If True, will print a warning when compiling one or more Op with"
"c code that can't be cached as there is no c_code_cache_version"
"() function to at least of of those Ops.",
BoolParam(False))
def local_bitwidth():
......@@ -956,6 +963,14 @@ class ModuleCache(object):
# Adding the KeyData file to this set means it is a
# versioned module.
self.loaded_key_pkl.add(key_pkl)
elif config.cmodule.warn_no_version:
key_flat = flatten(key)
ops = [k for k in key_flat
if isinstance(k, theano.Op)]
_logger.warning("not all the"
" following op(s) implement"
" c_code_cache_version(). This make them"
" recompiled for each process." + str(ops))
# Map the new module to its KeyData object. Note that
# we need to do it regardless of whether the key is
......
......@@ -11,6 +11,7 @@ import numpy
import theano
from theano.configparser import config, AddConfigVar, ConfigParam, StrParam
from theano.gof.utils import flatten
compiledir_format_dict = {"platform": platform.platform(),
"processor": platform.processor(),
......@@ -109,16 +110,6 @@ AddConfigVar('compiledir',
allow_override=False))
def flatten(a):
if isinstance(a, (tuple, list, set)):
l = []
for item in a:
l.extend(flatten(item))
return l
else:
return [a]
def cleanup():
"""
Delete keys in old format from the compiledir.
......
......@@ -332,3 +332,12 @@ def type_guard(type1):
return new_f
return wrap
def flatten(a):
if isinstance(a, (tuple, list, set)):
l = []
for item in a:
l.extend(flatten(item))
return l
else:
return [a]
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论