使用OpenCL写入Nvidia设备上的纹理内存

时间:2016-09-14 08:29:33

标签: opencl pyopencl

我无法使用Nvidia实现上的write_imagef()函数编译程序。 使用Tesla K10.G2.8GB上的驱动程序版本367.35python 2.7一起使用PyopenCL 2016.1, 我正在尝试编译以下程序,该程序因构建错误而失败:

主机代码:

import pyopencl as cl

platform = cl.get_platforms()[0]
devs = platform.get_devices()
device1 = devs[1]
mf = cl.mem_flags
ctx = cl.Context([device1])
Queue1 = cl.CommandQueue(ctx)

f = open('Minimal.cl', 'r')
fstr = "".join(f.readlines())
prg = cl.Program(ctx, fstr).build()

内核(Minimal.cl)

__kernel void test(image2d_t d_output){
    write_imagef(d_output,(int2)(1,1),(float4)(1.0f,1.0f,1.0f,1.0f));
}

我得到的错误是:

pyopencl.cffi_cl.RuntimeError: clbuildprogram failed: BUILD_PROGRAM_FAILURE -

我检查过,如果我的设备有图像支持,并且它支持读写 指定格式的纹理缓冲区。我认为,同样的情况不适用于3d案例, 因为我们的任何Nvidia设备都不支持扩展cl_khr_3d_image_writes, 但我不明白2D案例的问题。

1 个答案:

答案 0 :(得分:2)

图像参数必须声明为read_onlywrite_only(或read_write与OpenCL 2.x),因此您的内核定义应如下所示:

__kernel void test(write_only image2d_t d_output){
    write_imagef(d_output,(int2)(1,1),(float4)(1.0f,1.0f,1.0f,1.0f));
}