2017-09-15 3 views
0

Ich versuche, die Ausführung meines Algorithmus auf FPGA zu beschleunigen. Ich versuche, nach festen mathematischen Bibliotheken mit einer Länge von 32:32 (64) im C-Code zu suchen, die leicht in OpenCL übersetzt werden könnten. Gibt es jemanden, der eine gute Bibliothek kennt? Ich versuche, 128bit Datentypen zu vermeiden, da sie auf OpenCL Gleitpunkt sind, und ich schätze, dass es meinen Algorithmus nicht beschleunigen wird, wenn ich Fließkomma wieder verwenden muss. Jeder Vorschlag wird geschätzt. Wenn es eine Anleitung gibt, um eine eigene Bibliothek zu erstellen, bin ich damit einverstanden, solange es das einfach erklärt, haha.Festkomma-Bibliothek OpenCL FPGA

Dank

+0

Ich denke, Sie werden feststellen, dass eine Festkomma-Bibliothek ist langsamer als nur die Fließkomma-Hardware auf dem Gerät verwenden. Heutzutage ist der Fließkommawert gut optimiert, und integer Einheiten sind auf GPUs nicht so stark, da die meisten Grafikalgorithmen Gleitkommazahlen verwenden. – Dithermaster

+0

Ja, aber auf FPGAs ist das nicht wahr, da sie GPUs in Bezug auf die Anzahl der Gleitkommaberechnungen nicht schlagen können.Ich denke also, den Fixpunkt zu testen, um zu sehen, wie viel schneller es ist als Gleitkomma. –

+0

Guter Punkt. Ich bin nicht vertraut mit FPGA OpenCL-Implementierungen und sprach nur in Bezug auf CPU oder GPU. – Dithermaster

Antwort

1

Ich habe für Schwimmer GPU große nur gefunden. Ich werde Ihnen mit einigen CUDA C++ 11/C++ 14 Tipps:

-use normalisierte Schwimmerbereich [-1,0, + 1.0] für höchste Genauigkeit und speichern Normierwert separat (acumulated double),

-wenn die Daten ohnehin hoch sind (die Division der großen Zahlen endet mit einer verlustreichen Normalisierung), normalisieren Sie sich als mittlere Subbstraktion (getrennt gespeichert als uint64_t) = große Zahlen werden mit geringerer Genauigkeit gespeichert. Man kann einen getrimmten Mittelwert f. 5% statt Median,

-sort und normalisieren periodisch

-in 2017 verwenden, um neue GTX1080ti (GFLOPS/USD; GFLOPS/W) oder verwendet GTX 770,

-high-end FPGAs sind große wenn sie als Vorverarbeitungseinheiten nach ADCs oder innerhalb von (hohe Anforderungen für geringe Leistung) eingebetteten Systemen verwendet werden (typischerweise Netzwerkschalter, Medienverarbeitung für Video, Echtzeit-FFT-Geräte usw.). Darüber hinaus übersteigen selbst die größten Modelle dieser Ultra-Low-Power-Computer selten einige hundert GFLOPS für 1500 $. Es ist gleichzusetzen mit brandneuen, off-the-shell und Mehrheit-Problem-gelöst-auf-NVidia-Forum GT730 4GB GDDR5 von Palit für 35 $,

-get ein paar Dutzend Dollar Buch "CUDA by Beispiele "et al. J. Sanders, freier YT-Kurs "Udacity Intro zur parallelen Programmierung" und großes Buch "professionelles CUDA-Programm" et al. J. Cheng wird CUDA C++ 11 Zwischenprogrammierer in drei Vollzeitmonaten,

-make selbst Forschung für Fixpunkt-Arithmetik für ältere sequentielle CPUs zu einigen Schlussfolgerung, dass es nur begrenzte Bibliotheken für cos sind , squre root und andere Basis. Kompliziertere Funktionen sind problematisch und es gibt keine große Community-Unterstützung für die Fehlerbeseitigung. Am Ende werden Sie feststellen, dass es keine Beschleunigungen auf FPUs gibt, oder kleiner als die Größenordnung für solch einen großen Aufwand (

-kaufen (Minimum Mikroarchitektur Keppler) GPU (seit beliebten GTX670) 50 von einem nicht gut ausgebildete Teenager $,

--install Ubuntu, erhalten GNU Octave und bitte-cite-GNU Parallel zur Mehrheit der nicht-GPU Problemlösung,

-use FPGA High-End-ASIC zu entwickeln für die Massenproduktion.

Post Scriptum: Benutzer #WhatsACreel von YouTube könnte einige Fixpunktfunktionen für Sie schreiben- schreiben Sie ihm eine E-Mail mit einem ehrlichen Angebot. Auf seinem Kanal erklärt er die Basis des Festkomma-Arithemums.

+0

Um ehrlich zu sein, schätze ich deine Antwort und ja, ich erziele bessere Ergebnisse mit CUDA auf GPU, aber ich muss mit FPGAs experimentieren, um zu sehen, was ich erreichen kann. Woher kennst du den Fixpunkt, es ist nicht wirklich so schnell? –