我无法使用Nvidia实现上的write_imagef()
函数编译程序。
使用Tesla K10.G2.8GB
上的驱动程序版本367.35
与python 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案例的问题。
答案 0 :(得分:2)
图像参数必须声明为read_only
或write_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));
}