OpenCL FFT auf Nvidia- und AMD-Hardware?

8

Ich arbeite an einem Projekt, das sowohl auf Nvidia- als auch auf AMD-Grafikkarten FFTs verwenden soll. Ich suchte zunächst nach einer Bibliothek, die an beiden funktionierte (ich dachte, dies wäre die OpenCL-Methode), aber ich hatte kein Glück.

Jemand schlug mir vor, dass ich die FFT-Implementierung eines jeden Anbieters verwenden und einen Wrapper schreiben müsste, der basierend auf der Plattform auswählt, was zu tun ist. Ich fand die Implementierung von AMD ziemlich einfach, aber ich arbeite in der Zwischenzeit mit einer Nvidia-Karte (und das ist die wichtigere für meine spezielle Anwendung).

Die einzige Nvidia-Implementierung, die ich finden kann, ist die CUFFT-Version. Weiß jemand, wie ich die CUFFT-Bibliothek von OpenCL tatsächlich verwenden kann? Der einzige Weg, an den ich denken kann, ist, dass ich einen CUDA-Code neben meinem OpenCL-Code habe. Ich habe gelesen, dass ich OpenCL-Puffer nicht einfach als CUDA-Zeiger verwenden kann ( Versuch, OpenCL mit CUDA in der NVIDIA SDK-Vorlage zu mischen ). Muss ich die Puffer nach dem Ausführen von OpenCL-Kerneln zurück auf den Host kopieren und dann mithilfe der CUDA-Speicherübertragungsroutinen zurück auf die GPU kopieren? Ich mag diesen Ansatz nicht wirklich, da er sinnlose Speicherübertragungen zu beinhalten scheint. Ich würde es sehr bevorzugen, wenn ich einfach CUFFT von OpenCL verwenden könnte.

    
Lorentz 03.07.2012, 04:01
quelle

3 Antworten

6

NVIDIA hat keine Arbeit geleistet, um OpenCL-Bibliotheken wie FFT zu unterstützen. Es hat auch keine Quelle für seine CUDA-Bibliotheken bereitgestellt, daher gibt es keine Möglichkeit, diese mit OpenCL auszuführen.

AMDs FFT-Library ist Ihre beste Wahl und läuft auf jedem anderen OpenCL-kompatiblen Gerät, einschließlich NVIDIAs GPUs. ArrayFire OpenCL nutzt AMDs FFT-Bibliothek, und ich habe das auf Intel-, NVIDIA- und AMD-Geräten in unserer Labor.

    
Ben Stewart 03.07.2012 14:50
quelle
1

Zusätzlich zu Bens AMD-Vorschlag könntest du auch die Apple FFT Beispielcode. Ihr Code wird jedoch nur auf GPU-Geräten ausgeführt, wenn überprüft wird, für welche Gerätetypen die angegebene Befehlswarteschlange erstellt wurde.

    
matthias 05.07.2012 11:41
quelle
0

Der SHOC-Benchmark auf github enthält auch Code, den ich auf NVIDIA GPU 650M, Intel GPU und Intel CPU für FFT getestet habe . Unter Windows dauert es ein paar Minuten, um ein Projekt zu erstellen und den Include- und Link-Pfad festzulegen, aber es war einfach. Das Ausführen auf der Intel GPU erfordert das Setzen der Befehlszeilenoptionen oder eine kleine Codeänderung, da die Intel GPU Gerät 1 nicht Gerät 0 ist, was der Standard in der Shoc-Benchmark-Suite ist.

Ich habe die Richtigkeit der Ausgabe nicht überprüft, sondern nur, dass sie kompiliert und vollständig ausgeführt wurde.

    
atlake 15.03.2014 21:04
quelle

Tags und Links