2015-03-19 5 views
8

Ich habe gerade versucht, mich mit OpenCL vertraut zu machen, aber ich war total verwirrt, als alle im Internet darüber sprachen, ein herstellerspezifisches OpenCL-SDK herunterzuladen. Warum sollte ich das brauchen?Brauche ich wirklich ein OpenCL SDK?

Mein Verständnis OpenCL die Verwendung war der folgende:

  1. die OpenCL-Header-Dateien herunterladen, die von Kronos im Khronos OpenCL Registry gehalten werden und es zu Ihrem Compiler zur Verfügung stellen.
  2. Kompilieren Sie Ihren Code und verknüpfen Sie mit der OpenCL.dll.

Der Grund, warum es mich verwirrt, ist, weil ich dachte, dass OpenCL herstellerspezifische Implementierungen weg abstrahieren sollte. Wenn ich jetzt ein herstellerspezifisches SDK runterlade, dann ist dieser Vorteil nicht zerstört?

Kann jemand bitte dies klar machen?

Antwort

14

Ihr Verständnis ist absolut richtig - Sie benötigen keine Hersteller-SDKs, um OpenCL-Programme zu entwickeln oder auszuführen. Alles, was Sie brauchen, sind die Header und eine Bibliothek, mit der Sie verlinken können. Die Vendor-SDKs enthalten Beispielcode, auf den Sie sich bei der Verwendung von OpenCL konzentrieren können. Sie können auch Tools bereitstellen, die die Entwicklung unterstützen.

Unter Windows benötigen Sie eine OpenCL.lib-Bibliothek zum Verknüpfen, die von den SDKs bereitgestellt wird. Sie können download the sources für diese Bibliothek und bauen Sie es selbst, wenn Sie es wünschen.

Es gibt keinen Schaden durch die Verwendung eines bestimmten Herstellers SDK jedoch. Die Header und die Bibliothek, die sie im SDK bereitstellen, sollten nur die Khronos-Versionen sein, die Sie selbst herunterladen können. Das bedeutet, dass eine OpenCL-Anwendung, die mit dem SDK eines Anbieters erstellt wurde, immer noch gut gegen die Geräte anderer Hersteller läuft.

+0

Perfekte Antwort Danke! Ich konnte diese Informationen im Internet nicht finden. Vielen Dank auch für die Erklärung der Details mit der OpenCL.lib, denn das wäre meine nächste Frage gewesen. – denim

+0

Der nächste Schritt ist das dynamische Laden, in diesem Fall brauchen Sie nicht einmal die "OpenCL.lib", nur die Header und den Code, um den Zeiger auf die Funktionen aufzulösen, einige Leute kodierten bereits Werkzeuge dafür: https://github.com/martijnberger/clew – DarkZeros

+0

Danke, ich war mir der dynamischen Belastung bewusst, war aber neugierig zu wissen, warum niemand es wirklich im Internet erwähnt. Alle redeten über die Verwendung eines herstellerspezifischen SDK. Jetzt weiß ich, dass die SDKs nicht schaden und dass sie optional sind. – denim