Kann ich das einbetten von C++ - Klassen in OpenCL-Kernel?
gibt es eine Möglichkeit, selbst definierte C++ - Klassen in einem OpenCL-kernel?
Es sollte funktionieren wie dieser:
#include "element.cpp"
__kernel void do_something(__global element* input, __global element* output);
{
int index = get_global_id(0);
output[index] = input[index].update(index);
}
Dies ist interessant, denn Sie können angeben, dass die Arbeit, die getan werden muss im element::update(int no) danach.
Bekomme ich es nicht zum arbeiten. Dies ist, was die OpenCL-Compiler sagt mir:
unknown type name 'class'
In CUDA das funktioniert. Gibt es irgendwelche andere Ideen, wenn der Ansatz mit Objekten, die in der OpenCL-kernel nicht funktioniert?
Vielen Dank für Eure Hinweise im Voraus!
- CUDA ermöglicht einige C++ - features wie templates im Kernel.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich glaube, OpenCL folgt C99-Sprache-Spezifikation und nicht C++. Die Spezifikationen für die C++ version von OpenCL ist Los. Ich glaube, AMD APP umgesetzt hat, die C++ version von OpenCL. Kommen wir zurück zu deiner Frage, ich denke, es ist am besten, um eine Struktur, die als Schnittstelle zwischen C++ und C. Die C++ - version sollte ein wrapper um die C-Implementierung, WENN Sie direly so tun müssen.
EDIT: ich konnte nicht platzieren Sie diese in die Kommentare, damit man es hier. AMD ' s C++ - Bibliotheken rund um OpenCL gehören ein statische C++ - Bibliothek und Bolt.
Nicht. Die OpenCL-Sprache erweitert C99, und daher keine Unterstützung für C++ - Schlüsselwörter und-Funktionen, z.B. "Klasse".
Wenn Ihr code zu beziehen, ist sowohl in C++ und OpenCL, d.h. in der gemeinsamen Teilmenge der beiden, könnte man etwas ähnlich
und berufen, dass entweder OpenCL oder C++, wie gewünscht z.B.
zur Verfügung gestellt, das element ist eine Struktur, und nicht mit Feldern von nicht-C-Typen.
Im Allgemeinen die ein-und Ausgänge OpenCL muss einfach structs oder arrays, nicht Klassen.
Nein, andere sagen, Sie OpenCL basiert in C99 daher können Sie Strukturen wie