diff --git a/cpu/cpujit.py b/cpu/cpujit.py index cdb73b82c7b40d7cd7eef9a727f0beede6bdcb4c..02d9291aa397e1488b4e9df603f6d9b74425643e 100644 --- a/cpu/cpujit.py +++ b/cpu/cpujit.py @@ -430,6 +430,7 @@ def makePythonFunctionIncompleteParams(kernelFunctionNode, argumentDict): parameters = kernelFunctionNode.parameters cache = {} + cacheValues = [] def wrapper(**kwargs): key = hash(tuple((k, id(v)) for k, v in kwargs.items())) @@ -441,6 +442,7 @@ def makePythonFunctionIncompleteParams(kernelFunctionNode, argumentDict): fullArguments.update(kwargs) args = buildCTypeArgumentList(parameters, fullArguments) cache[key] = args + cacheValues.append(kwargs) # keep objects alive such that ids remain unique func(*args) return wrapper diff --git a/gpucuda/cudajit.py b/gpucuda/cudajit.py index 0b18c1359f88b7ee57a51d359123611e3da45270..299492d635a9e66b1021623ee1aafac36c4df743 100644 --- a/gpucuda/cudajit.py +++ b/gpucuda/cudajit.py @@ -29,6 +29,7 @@ def makePythonFunction(kernelFunctionNode, argumentDict={}): parameters = kernelFunctionNode.parameters cache = {} + cacheValues = [] def wrapper(**kwargs): key = hash(tuple((k, id(v)) for k, v in kwargs.items())) @@ -45,6 +46,7 @@ def makePythonFunction(kernelFunctionNode, argumentDict={}): args = _buildNumpyArgumentList(parameters, fullArguments) cache[key] = (args, dictWithBlockAndThreadNumbers) + cacheValues.append(kwargs) # keep objects alive such that ids remain unique func(*args, **dictWithBlockAndThreadNumbers) #cuda.Context.synchronize() # useful for debugging, to get errors right after kernel was called return wrapper