diff --git a/pyopencl/__init__.py b/pyopencl/__init__.py index 0c3df5f952567d087a4b531ed0f17b3d69a14186..5b84393df9da5a4b9da07b3d417e67766b30f903 100644 --- a/pyopencl/__init__.py +++ b/pyopencl/__init__.py @@ -347,6 +347,9 @@ class Program(object): elif isinstance(options, six.text_type): options = [options.encode("utf8")] + if cache_dir is None: + cache_dir = self._context.cache_dir + options = (options + _DEFAULT_BUILD_OPTIONS + _DEFAULT_INCLUDE_OPTIONS @@ -1208,7 +1211,7 @@ _add_functionality() # {{{ convenience -def create_some_context(interactive=None, answers=None): +def create_some_context(interactive=None, answers=None, cache_dir=None): import os if answers is None: if "PYOPENCL_CTX" in os.environ: @@ -1219,7 +1222,7 @@ def create_some_context(interactive=None, answers=None): from pyopencl.tools import get_test_platforms_and_devices for plat, devs in get_test_platforms_and_devices(): for dev in devs: - return Context([dev]) + return Context([dev], cache_dir=cache_dir) if answers is not None: pre_provided_answers = answers @@ -1334,7 +1337,7 @@ def create_some_context(interactive=None, answers=None): raise RuntimeError("not all provided choices were used by " "create_some_context. (left over: '%s')" % ":".join(answers)) - return Context(devices) + return Context(devices, cache_dir=cache_dir) _csc = create_some_context diff --git a/pyopencl/cffi_cl.py b/pyopencl/cffi_cl.py index ecb42397eb415296ce2865c82e92be4f009660ac..2e6caa6109dfde15b788f34a87a1b1f06b1bd200 100644 --- a/pyopencl/cffi_cl.py +++ b/pyopencl/cffi_cl.py @@ -641,7 +641,7 @@ def _parse_context_properties(properties): class Context(_Common): _id = 'context' - def __init__(self, devices=None, properties=None, dev_type=None): + def __init__(self, devices=None, properties=None, dev_type=None, cache_dir=None): c_props = _parse_context_properties(properties) status_code = _ffi.new('cl_int*') @@ -665,6 +665,7 @@ class Context(_Common): dev_type)) self.ptr = _ctx[0] + self.cache_dir = cache_dir # }}}