def _generate_kernel_bin(self, k, ctx): gk = gpuarray.GpuKernel(k.code, k.name, k.params, context=ctx, **k.flags) bin = gk._binary bcode = ','.join(hex(ord(c)) for c in bin) return ("""static const char %(bname)s[] = { %(bcode)s };""" % dict(bname=k.binvar, bcode=bcode))
def c_support_code_apply(self, node, name): nb = 0 if self.kshp is not None: nb = self.kshp[1] kernels = self.gpu_kernels(node, name) k = kernels[0] code = """ #define THEANO_KERN_WID %(nb)d """ % locals() code += "\n".join([ open(os.path.join(os.path.split(__file__)[0], f)).read() for f in ["conv_kernel.cu", "conv_full_kernel.cu"] ]) kname = "conv_full_load_everything" gk = gpuarray.GpuKernel(code, k.name, k.params, **k.flags) bin = gk._binary bcode = ','.join(hex(ord(c)) for c in bin) code = code.replace('\\', '\\\\') code = code.replace('"', '\\"') code = code.replace('\n', '\\n') mod = """ static const char conv_bcode[] = {%(bcode)s}; static const char *conv_code = "%(code)s"; """ % locals() for k in kernels: mod += "static GpuKernel " + k.name + '_' + name + ";\n" mod += open(os.path.join(os.path.split(__file__)[0], "conv.cu")).read() return mod