【发布时间】:2014-04-28 15:52:34
【问题描述】:
我在 pyopencl 中遇到了这个错误:
pyopencl.RuntimeError: clBuildProgram failed: invalid binary -
Build on <pyopencl.Device 'GeForce GTX 470' on 'NVIDIA CUDA' at 0x263c1b0>:
ptxas application ptx input, line 116; error : Call has wrong number of parameters
ptxas fatal : Ptx assembly aborted due to errors
这是一段 Python 代码:
u_buf = cl.Buffer(ctx, mf.READ_ONLY | mf.COPY_HOST_PTR, hostbuf=u)
v_buf = cl.Buffer(ctx, mf.READ_ONLY | mf.COPY_HOST_PTR, hostbuf=v)
d_dev = cl_array.to_device(queue, delta)
cont_buf = cl.Buffer(ctx, mf.READ_WRITE, size=cont1.nbytes)
P_buf = cl.Buffer(ctx, mf.WRITE_ONLY, size=P.nbytes)
sigma_buf = cl.Buffer(ctx, mf.READ_WRITE, size=sigma.nbytes)
cl.enqueue_write_buffer(queue, sigma_buf, sigma)
kernel = cl.Program(ctx, forward_kernel).build()
kernel.forward(queue, u.shape, None, u_buf, v_buf, d_dev.data, numpy.int16(l), cont_buf, P_buf, sigma_buf)
和我的内核的开始:
__kernel void forward(__global const int *u,
__global const int *v,
__global int *d,
const int l,
int cont,
__global int *P,
__global int *sigma )
{
int gid = get_global_id(0);
...
u, v, d, P, sigma 是 numpy 数组,l 是整数 (np.int_),cont1 是布尔值。
【问题讨论】:
-
在内核中查找未定义的函数调用。有时我不小心留下了 printf() 电话。您还可以查看生成的 .ptx 以获取调用语句。在 linux 下,您可以检查 ~/.nv 计算缓存中生成的 .ptx 文件。
标签: pyopencl