2016-07-07 25 views
4

Ich verstehe, dass es eine OpenCL C++ API gibt, aber ich habe Probleme beim Kompilieren meiner Kernel ... müssen die Kernel in C geschrieben werden? Und dann ist es nur der Host-Code, der in C++ geschrieben werden darf? Oder gibt es eine Möglichkeit, die Kernel in C++ zu schreiben, die ich nicht finde? Genauer gesagt, ich versuche, meine Kernel mit pyopencl zu kompilieren, und es scheint zu scheitern, weil es sie als C-Code kompiliert.Ist es möglich, OpenCL-Kernel in C++ anstatt in C zu schreiben?

+0

OpenCL C ist eine Teilmenge von C99. Es gibt auch OpenCL C++, das eine Untergruppe von C++ 14 ist, aber noch nicht von irgendeinem Hersteller implementiert wurde. Host-Code kann in C, C++, Python usw. geschrieben werden. Wo ist Ihr Code? – doqtor

+0

Ich würde das als Antwort akzeptieren. Also lassen Sie mich mein Verständnis überprüfen: OpenCL C++ wurde spezifiziert, aber noch nicht auf irgendeiner Plattform implementiert? Und so muss ich meine Kernel in OpenCL C schreiben? –

+0

Ja. C für jetzt. – mfa

Antwort

9

OpenCL C ist eine Teilmenge von C99.

Es gibt auch OpenCL C++ (OpenCL 2.1 und OpenCL 2.2 specs), die eine Teilmenge von C++14 ist, aber es ist noch nicht von jedem Hersteller implementiert (OpenCL 2.1 teilweise implementiert von Intel aber nicht C++ - Kernel).

Host-Code kann in C, C++ geschrieben werden, Python etc.

Kurzum Sie OpenCL auf wikipedia lesen kann. Zu jeder OpenCL-Version gibt es eine Beschreibung. In pyopencl können Sie OpenCL1.2 verwenden (soweit ich weiß, es gibt noch keine Unterstützung für OpenCL2.0). Weitere Informationen zu OpenCL finden Sie auf der Website Khronos.

+0

Die Implementierung von AMD unterstützt seit 2012 eine (begrenzte) Anzahl von C++ - Funktionen als [Erweiterung] (http://developer.amd.com/community/blog/2012/05/21/opencl-1-2-and-c- static-kernel-language-now-available /). –

+0

@doqtor, können Sie Ihre Antwort mit dem aktuellen Stand der Dinge aktualisieren? – einpoklum

0

Als Referenz gibt es auch Boost.Compute. Es hilft dir nicht mit pyopencl, aber es adressiert viele der Probleme, die pyopencl tut, und hat einige Metaprogrammierungszauber, die das Schreiben von OpenCL-Kernels in C++ erleichtern.

This SO question (in den Boost.Compute FAQ referenziert) enthält auch eine nette Diskussion über einige der relevanten Design-Constraints, die OpenCL für Entwickler darstellt.