使用 OpenCL 写入 Nvidia 设备上的纹理内存
Write to texture memory on Nvidia device with OpenCL
我无法编译程序,使用 Nvidia 实现上的 write_imagef()
函数。
使用 Tesla K10.G2.8GB
在 python 2.7
和 PyopenCL 2016.1
上使用驱动程序版本 367.35
,
我正在尝试编译以下程序,但因构建错误而失败:
主机代码:
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
,
但我不明白二维案例的问题。
图像参数必须声明为 read_only
或 write_only
(或 read_write
with 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));
}
我无法编译程序,使用 Nvidia 实现上的 write_imagef()
函数。
使用 Tesla K10.G2.8GB
在 python 2.7
和 PyopenCL 2016.1
上使用驱动程序版本 367.35
,
我正在尝试编译以下程序,但因构建错误而失败:
主机代码:
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
,
但我不明白二维案例的问题。
图像参数必须声明为 read_only
或 write_only
(或 read_write
with 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));
}