Я не могу скомпилировать программы, используя функции write_imagef()
в реализациях Nvidia. Работа с Tesla K10.G2.8GB
использованием драйвера версии 367.35
на python 2.7
с PyopenCL 2016.1
, Я пытаюсь собрать следующую программу, которая терпит неудачу с ошибкой сборки:Запись в память текстуры на устройстве Nvidia с OpenCL
Хост Код:
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()
Kernel (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-случая, , потому что расширение cl_khr_3d_image_writes
не поддерживается ни на одном из наших устройств Nvidia, , но я не понимаю проблему для 2D-футляра.
Проблема, кажется, не ограничивается этим устройством. Происходит в каждой реализации Nvidia, которую мы используем. – Dschoni
При несоблюдении программы вызовите эквивалент PyopenCL, вызывающий API CLGetProgramBuildInfo OpenCL с CL_PROGRAM_BUILD_LOG, чтобы получить удобное для чтения описание того, что пошло не так. – Dithermaster