2016-12-02 11 views
1

Ich entwickle für eine GPU mit OpenCL 1.2.OpenCL halbe Quadratwurzel

Ich versuche, halbe Quadratwurzelfunktion zu verwenden, um die Quadratwurzel meines halben Datentyps zu berechnen.

Wie auch immer, für alle Half_Square Root-Funktionen, wird am Ende eine Makro-Erweiterung zur Standard-Quadratwurzel-Funktion.

Dies führt zu Compilerfehlern, da keine der Funktionsüberladungen mit dem halben Datentyp übereinstimmt.

Ich verwende den folgenden Pragma in meiner Kernel-Datei #pragma OPENCL EXTENSION cl_khr_fp16 : enable

+0

Sie könnten 'half_sqrt (x)' versuchen. Dies garantiert eine Genauigkeit von mindestens 10 Bits, aber der Hersteller kann dennoch entscheiden, ihn mit float zu implementieren. – Neapolitan

Antwort

2

half Typ Unterstützung in OpenCL ist nur verfügbar, wenn die cl_khr_fp16 Erweiterung verfügbar ist. Es ist optional und nicht auf allen Geräten verfügbar. Eine Anwendung kann die Konfigurationsinformationen unter Verwendung des Op-Codes CL_DEVICE_HALF_FP_CONFIG mit clGetDeviceInfo für ein OpenCL-Gerät abfragen, das Gleitkommawerte mit halber Genauigkeit unterstützt. Siehe https://www.khronos.org/registry/cl/sdk/1.2/docs/man/xhtml/cl_khr_fp16.html

Die Ausnahme ist, dass, wenn Bilder unterstützen Sie Bilder haben können, die half Typen enthalten, aber alle Lese- und Schreibvorgänge und Berechnungen werden in einfacher Genauigkeit float getan. Die andere Ausnahme besteht darin, dass Sie die Funktionen zum Laden/Speichern von Vektordaten (z. B. vload_half) verwenden können, um half Werte aus dem Speicher in float Skalare und Vektoren zu laden und zu speichern. In keinem Fall werden Berechnungen wie sqrt in half, nur Lagerung durchgeführt.

+0

Ich benutze Nvidea K20 GPU. Es scheint, als wäre halber Speicher verfügbar, aber keine Berechnung. Danke für deine Antwort. – johng