提交 6604cb41 authored 作者: Pascal Lamblin's avatar Pascal Lamblin

Remove call to GpuKernel_init with binary

As it is trying over and over to compile it as source. Also, start removing generation of binaries from Theano.
上级 e7582189
...@@ -16,7 +16,7 @@ from theano.gof.utils import MethodNotDefined ...@@ -16,7 +16,7 @@ from theano.gof.utils import MethodNotDefined
from collections import deque from collections import deque
from six import string_types, iterbytes from six import string_types
from six.moves import xrange from six.moves import xrange
from six import iteritems from six import iteritems
...@@ -316,14 +316,6 @@ class GpuKernelBase(object): ...@@ -316,14 +316,6 @@ class GpuKernelBase(object):
# We rely on the input types for the directory to gpuarray includes # We rely on the input types for the directory to gpuarray includes
return o + [np.get_include()] return o + [np.get_include()]
def _generate_kernel_bin(self, k, ctx):
gk = gpuarray.GpuKernel(k.code, k.name, k.params, context=ctx,
**k._get_py_flags())
bin = gk._binary
bcode = ','.join(hex(c) for c in iterbytes(bin))
return ("""static const char %(bname)s[] = { %(bcode)s };""" %
dict(bname=k.binvar, bcode=bcode))
def _generate_kernel_code(self, k): def _generate_kernel_code(self, k):
code = '\\n'.join(l for l in k.code.split('\n')) code = '\\n'.join(l for l in k.code.split('\n'))
code = code.replace('"', '\\"') code = code.replace('"', '\\"')
...@@ -375,10 +367,8 @@ int {sname}(unsigned int _nd, size_t *_n, size_t _shared, {args}) {{ ...@@ -375,10 +367,8 @@ int {sname}(unsigned int _nd, size_t *_n, size_t _shared, {args}) {{
def c_support_code_apply(self, node, name): def c_support_code_apply(self, node, name):
kernels = self.gpu_kernels(node, name) kernels = self.gpu_kernels(node, name)
ctx = self.get_params(node)
bins = '\n'.join(self._generate_kernel_bin(k, ctx) for k in kernels)
codes = '\n'.join(self._generate_kernel_code(k) for k in kernels) codes = '\n'.join(self._generate_kernel_code(k) for k in kernels)
return '\n'.join([bins, codes]) return codes
def c_support_code_struct(self, node, name): def c_support_code_struct(self, node, name):
kernels = self.gpu_kernels(node, name) kernels = self.gpu_kernels(node, name)
...@@ -393,20 +383,14 @@ int {sname}(unsigned int _nd, size_t *_n, size_t _shared, {args}) {{ ...@@ -393,20 +383,14 @@ int {sname}(unsigned int _nd, size_t *_n, size_t _shared, {args}) {{
return """{ return """{
int err; int err;
int types[%(numargs)u] = {%(types)s}; int types[%(numargs)u] = {%(types)s};
const char *bcode = %(bvar)s; if ((err = GpuKernel_init(&%(ovar)s, %(ctx)s->ctx, 1,
size_t sz = sizeof(%(bvar)s); &%(cname)s, NULL, "%(kname)s", %(numargs)u,
if (GpuKernel_init(&%(ovar)s, %(ctx)s->ctx, 1, &bcode, &sz, types, %(flags)s, NULL)) != GA_NO_ERROR) {
"%(kname)s", %(numargs)u, types, GA_USE_BINARY, NULL) PyErr_Format(PyExc_RuntimeError, "GpuKernel_init error %%d: %%s",
!= GA_NO_ERROR) { err, gpucontext_error(%(ctx)s->ctx, err));
if ((err = GpuKernel_init(&%(ovar)s, %(ctx)s->ctx, 1, %(fail)s
&%(cname)s, NULL, "%(kname)s", %(numargs)u,
types, %(flags)s, NULL)) != GA_NO_ERROR) {
PyErr_Format(PyExc_RuntimeError, "GpuKernel_init error %%d: %%s",
err, gpucontext_error(%(ctx)s->ctx, err));
%(fail)s
}
} }
}""" % dict(numargs=len(k.params), types=k._get_c_types(), bvar=k.binvar, }""" % dict(numargs=len(k.params), types=k._get_c_types(),
ovar=k.objvar, kname=k.name, cname=k.codevar, ovar=k.objvar, kname=k.name, cname=k.codevar,
flags=k._get_c_flags(), fail=fail, ctx=ctx) flags=k._get_c_flags(), fail=fail, ctx=ctx)
...@@ -432,7 +416,7 @@ int {sname}(unsigned int _nd, size_t *_n, size_t _shared, {args}) {{ ...@@ -432,7 +416,7 @@ int {sname}(unsigned int _nd, size_t *_n, size_t _shared, {args}) {{
v = self.c_code_cache_version() v = self.c_code_cache_version()
if not v: if not v:
return () return ()
return (self.c_code_cache_version(), self.kernel_version(node)) return (v, self.kernel_version(node))
def kernel_version(self, node): def kernel_version(self, node):
""" """
...@@ -446,7 +430,7 @@ int {sname}(unsigned int _nd, size_t *_n, size_t _shared, {args}) {{ ...@@ -446,7 +430,7 @@ int {sname}(unsigned int _nd, size_t *_n, size_t _shared, {args}) {{
The node that we need the cache version for. The node that we need the cache version for.
""" """
return (7, self.get_params(node).bin_id) return (8, self.get_params(node).bin_id)
def forward_string_meth(name): def forward_string_meth(name):
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论