2016-09-14 2 views
0

Ich bin nicht kompilieren Programme, mit den write_imagef() Funktionen auf Nvidia-Implementierungen. Arbeiten mit einem Tesla K10.G2.8GB die Treiberversion mit 367.35 auf python 2.7 mit PyopenCL 2016.1, Ich versuche, das folgende Programm zu kompilieren, die mit einem Build-Fehler fehlschlägt:Schreiben in Textur Speicher auf Nvidia-Gerät mit OpenCL

Host-Code:

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)); 
} 

Der Fehler, den ich bekommen ist:

Ich habe überprüft, ob mein Gerät Image-Unterstützung hat und dass es das Lesen und Schreiben von Texturpuffern im angegebenen Format zu unterstützt. Ich denke, dass der gleiche Fall für den Fall 3d, nicht funktioniert, weil die Erweiterung cl_khr_3d_image_writes nicht auf irgendwelchen unserer Nvidia Geräte, unterstützt wird, aber ich verstehe das Problem für den 2D Fall nicht.

+0

Problem scheint nicht auf dieses Gerät beschränkt. Tritt in jeder Nvidia-Implementierung auf, die wir verwenden. – Dschoni

+1

Wenn das Programm nicht erstellt werden kann, rufen Sie das PyopenCL-Äquivalent zum Aufrufen der OpenCL-API clGetProgramBuildInfo mit CL_PROGRAM_BUILD_LOG auf, um eine lesbare Beschreibung der Fehler zu erhalten. – Dithermaster

Antwort

2

Bild Argumente müssen entweder read_only oder write_only (oder read_write mit OpenCL 2.x) deklariert werden, so dass Ihre Kernel-Definition sollte wie folgt aussehen:

__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)); 
} 
+0

Das habe ich gerade herausgefunden. Ich frage mich nur, warum das nirgends in der Standarddokumentation erwähnt wird .... – Dschoni

Verwandte Themen