diff --git a/cpu/cpujit.py b/cpu/cpujit.py index 7f36c88c37a11a7e6697e4b1949152c3b4dfeb53..fa04eda775b2d0aeba8050ec717c710057f6b672 100644 --- a/cpu/cpujit.py +++ b/cpu/cpujit.py @@ -68,6 +68,7 @@ import platform import glob import atexit import shutil +import numpy as np from appdirs import user_config_dir, user_cache_dir from ctypes import cdll from pystencils.backends.cbackend import generateC, getHeaders @@ -428,7 +429,8 @@ def makePythonFunctionIncompleteParams(kernelFunctionNode, argumentDict, func): cacheValues = [] def wrapper(**kwargs): - key = hash(tuple((k, id(v)) for k, v in kwargs.items())) + key = hash(tuple((k, v.ctypes.data, v.strides, v.shape) if isinstance(v, np.ndarray) else (k, id(v)) + for k, v in kwargs.items())) try: args = cache[key] func(*args) diff --git a/gpucuda/cudajit.py b/gpucuda/cudajit.py index 6f5633d5e99cb7ff751800f94e1cab1d4369b1c6..2cfafb0ee2910ac80ff01f53298bdde4d263a0d1 100644 --- a/gpucuda/cudajit.py +++ b/gpucuda/cudajit.py @@ -33,7 +33,8 @@ def makePythonFunction(kernelFunctionNode, argumentDict={}): cacheValues = [] def wrapper(**kwargs): - key = hash(tuple((k, id(v)) for k, v in kwargs.items())) + key = hash(tuple((k, v.ctypes.data, v.strides, v.shape) if isinstance(v, np.ndarray) else (k, id(v)) + for k, v in kwargs.items())) try: args, dictWithBlockAndThreadNumbers = cache[key] func(*args, **dictWithBlockAndThreadNumbers)