Fehler CL_INVALID_KERNEL_NAME, wenn ich cl_khr_fp64 in einem Kernel verwende

9

Ich habe einen Fehler in einem OpenCL -Kernel, wenn ich versuche, die Erweiterung cl_khr_fp64 zu verwenden, kompiliert der Kernel und das Build-Protokoll ist leer, aber wenn ich% rufe co_de%, ich habe CL_INVALID_KERNEL_NAME Fehler.

Die Quelle, die fehlschlägt:

%Vor%

Diese Quelle kompiliert rechts:

%Vor%

Ich verwende OpenCL 1.0 mit einem Tesla C1060 mit cl_khr_fp64 in CL_DEVICE_EXTENSIONS , Treiber 280.13 und CL_PLATFORM_VERSION = OpenCL 1.1 CUDA 4.0.1

    
Zhen 22.11.2011, 08:33
quelle

3 Antworten

2

Das Problem war, dass wir vor dem Aufruf von clCreateProgramWithSource die Zeilenumbrüche aus der Quelle entfernen. ZB: die Quelle:

%Vor%

Wird:

%Vor%

Es verursacht kein Problem, bis wir die Präprozessor-Direktive hinzufügen.

Es ist der OpenCL-Präprozessor, der eigentlich will, dass Newlines da sind. Also sollte es geschrieben werden als:

%Vor%     
Zhen 30.12.2011, 11:01
quelle
0

Dies ist eines der Dinge, die mich nervt haben. Das Problem, das ich denke, ist der zuvor kompilierte Code irgendwo zwischengespeichert und wiederverwendet wird. Deine neuen Änderungen ergeben also seltsame Fehler.

Um es zu beheben (KEINE "echte Lösung", aber es funktioniert für mich), versuche, deinen Programmnamen (und vielleicht den Kernel-Namen) zu ändern, z. Wenn das Programm a.out ist, dann mach es beim nächsten Kompilieren a2.out und sieh nach, ob es behoben ist. Ich hoffe, das hilft.

Wenn Sie eine bessere Lösung finden, lassen Sie es uns bitte wissen.

    
user995502 25.11.2011 16:49
quelle
0

Ich bin vor ein paar Tagen auch über einen solchen Virus gestolpert, und ich habe es einfach ausgearbeitet. Ich teile hier meine Lösung, obwohl sie ziemlich verkabelt ist und ich immer noch nicht weiß warum.

%Vor%

Dies ist mein ursprünglicher Code, der eine statische Funktion ist, die von einem Konstruktor einer Klasse aufgerufen wird. Der Konstruktor kann ohne Frage aufgerufen werden. Jedes Mal, wenn die obige Funktion aufgerufen wird, würde ich jedoch den Fehler "ungültiger Kernel-Name" erhalten, der von opencl herrührt, kann den Kernel "filterSubsampleUChar4Kernel" nicht finden. Ich habe viel versucht, aber keiner von ihnen hat funktioniert. Aber heute, sehr selten, versuche ich den Funktionsnamen zu ändern und es gelingt mir. Was ich mache ist nichts anderes, als "filterSubsampleUChar4Kernel" in "filterSubsampleKernel" zu ändern. Ich habe auch versucht, andere Namen zu ändern, z. "filterSubsampleKernel_test", "filterSubsample1Kernel". Aber sie haben nicht funktioniert. Es ist ziemlich verkabelt, nicht wahr?

    
Takatsukii 27.05.2017 02:55
quelle

Tags und Links