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

Merge pull request #585 from nouiz/cache

Cache
...@@ -57,6 +57,12 @@ New Features ...@@ -57,6 +57,12 @@ New Features
* "CudaNdarray[*] += ndarray" work in more case (Frederic B.) * "CudaNdarray[*] += ndarray" work in more case (Frederic B.)
* We add dimensions to CudaNdarray to automatically broadcast more frequently. * We add dimensions to CudaNdarray to automatically broadcast more frequently.
(Frederic B.) (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 Sparse
* Implement theano.sparse.mul(sparse1, sparse2) when both inputs don't * Implement theano.sparse.mul(sparse1, sparse2) when both inputs don't
......
...@@ -537,3 +537,18 @@ import theano and print the config variable, as in: ...@@ -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 and this class. This list is sorted from the sub
optimization that takes the most time to the optimization that takes optimization that takes the most time to the optimization that takes
the least time. 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 ...@@ -18,6 +18,8 @@ import distutils.sysconfig
import numpy.distutils # TODO: TensorType should handle this import numpy.distutils # TODO: TensorType should handle this
import theano
from theano.gof.utils import flatten
from theano.configparser import config from theano.configparser import config
from theano.gof.cc import hash_from_code from theano.gof.cc import hash_from_code
...@@ -26,9 +28,14 @@ import compilelock ...@@ -26,9 +28,14 @@ import compilelock
from theano.configparser import AddConfigVar, BoolParam from theano.configparser import AddConfigVar, BoolParam
AddConfigVar('cmodule.mac_framework_link', 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"), "Bus Error"),
BoolParam(False)) 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(): def local_bitwidth():
...@@ -956,6 +963,14 @@ class ModuleCache(object): ...@@ -956,6 +963,14 @@ class ModuleCache(object):
# Adding the KeyData file to this set means it is a # Adding the KeyData file to this set means it is a
# versioned module. # versioned module.
self.loaded_key_pkl.add(key_pkl) 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 # Map the new module to its KeyData object. Note that
# we need to do it regardless of whether the key is # we need to do it regardless of whether the key is
......
...@@ -11,6 +11,7 @@ import numpy ...@@ -11,6 +11,7 @@ import numpy
import theano import theano
from theano.configparser import config, AddConfigVar, ConfigParam, StrParam from theano.configparser import config, AddConfigVar, ConfigParam, StrParam
from theano.gof.utils import flatten
compiledir_format_dict = {"platform": platform.platform(), compiledir_format_dict = {"platform": platform.platform(),
"processor": platform.processor(), "processor": platform.processor(),
...@@ -109,16 +110,6 @@ AddConfigVar('compiledir', ...@@ -109,16 +110,6 @@ AddConfigVar('compiledir',
allow_override=False)) 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(): def cleanup():
""" """
Delete keys in old format from the compiledir. Delete keys in old format from the compiledir.
......
...@@ -332,3 +332,12 @@ def type_guard(type1): ...@@ -332,3 +332,12 @@ def type_guard(type1):
return new_f return new_f
return wrap 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 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论