Guter heuristischer Punkt, an dem sich das Senden von FFT an die GPU rechnerisch lohnt?


7

Dies ist eine ziemlich einfache Frage, aber ich habe in den letzten 5 Jahren nicht viel über eine gute Faustregel für die Berechnung einer FFT auf der GPU im Vergleich zur CPU geschrieben. Ich weiß, dass der größte Teil des Overheads von GPU-berechneten FFTs darin besteht, dass Sie zuerst die Daten in einen Puffer schreiben und diese Daten dann von der CPU an die GPU übertragen müssen, um die Transformation zu berechnen.

Dies impliziert natürlich, dass die GPU-Berechnung der FFT besser für größere FFT-Berechnungen geeignet ist, bei denen die Anzahl der Schreibvorgänge auf die GPU im Vergleich zur Anzahl der von der GPU durchgeführten Berechnungen relativ gering ist. Das Problem wird dann jedoch zu dem Wissen, an welchem ​​Punkt die FFT auf der CPU gegenüber der GPU eine bessere Leistung erbringt. Das Beste, was ich gefunden habe, ist "Wenn Sie größere FFTs berechnen", aber das ist ein wenig relativistisch, um eine besonders aussagekräftige Richtlinie für Praktiker zu sein, insbesondere angesichts der Tatsache, dass sich die GPU-Technologie in den letzten Jahren so schnell beschleunigt hat.

Ich suche nur nach einer konkreteren Schätzung, ab wann es effizient wird, die Transformation zwischen GPU und CPU zu berechnen (vielleicht gibt es irgendwo da draußen einen Benchmark?). Vielen Dank im Voraus für jede Hilfe, die Sie leisten können.

Antworten:


10

Ich fürchte, es wird nie eine Faustregel geben!

Die Gründe sind vielfältig, vor allem, dass sowohl die Systeme, die Sie in Betracht ziehen, als auch die Probleme, die Sie lösen möchten, in einem sehr großen Bereich variieren.

Problembasierte Aspekte

Sie sagen, Sie möchten eine FFT durchführen - aber das ist immer nur die Hälfte dessen, was Sie tatsächlich tun möchten!

Muss die FFT in abs² konvertiert, dann Farben zugeordnet und dann auf einem Bildschirm angezeigt werden? Tun Sie es in der GPU, es ist genau dort, wo es hingehört; fosphor macht das mit einfachen 200MS / s auf fähigen PC / GPU-Kombinationen:

Phosphor

In diesem Fall spielt die Größe der FFT keine Rolle. Ihre Daten werden von der GPU weiterverarbeitet, also die FFT dort.

Auf der anderen Seite möchten Sie vielleicht etwas tun, das von vielen Überprüfungen einzelner Elemente in der FFT in der CPU abhängt? Möglicherweise nur eine FFT und dann nicht mehr viele?

In diesem Fall hilft Ihnen Ihr theoretischer Durchsatz überhaupt nicht. Warten Sie nur darauf, dass die Daten aus Ihrem CPU-Cache zurück in den kohärenten Speicher gelangen, damit sie an die GPU weitergeleitet werden können, wo Sie dann eine FFT initiieren (möglicherweise verschwenden Sie unterwegs einen Interrupt- / Kontextwechsel) Warten Sie, bis es fertig ist. Die GPU hat die Daten per DMA in Ihren Hauptspeicher zurückgesendet und Sie haben sie in den Cache Ihrer CPU geladen. Dies zahlt sich selbst für mittelgroße FFTs nicht aus.

Also: Dieses ganze "Geschäft mit mathematischen Beschleunigern mit hoher Latenz" zahlt sich wirklich nur dann aus, wenn Sie während des Wartens etwas Vernünftiges tun können. Wenn Sie nicht können, gibt es eine große Latenzstrafe.

Systembasierte Aspekte

Ok, ich gehe hier nicht zu sehr ins Detail, aber:

  • DSP-Systeme sind entweder CPU- oder Speicherbandbreitenbeschränkt
  • Wenn Ihr GPU-Betrieb bei der CPU-Begrenzung hilft, aber die Speicherschnittstelle zusätzlich belastet, während der Rest Ihres Systems nur über eine begrenzte Speicherbandbreite verfügt, verletzen Sie sich selbst.
  • Gleiches gilt umgekehrt: Möglicherweise ist Ihr Algorithmus (die FFT in Ihrer spezifischen Größe) CPU-begrenzt, aber Ihre GPU-Beschleunigung führt zu zusätzlichen Interrupts
  • Was ist eine FFT-Größe, die Ihre CPU sehr gut kann? Dies wird wahrscheinlich durch die Größe der L1- und L2-Caches definiert. Eine Xeon-CPU mit Zahlenverarbeitung verfügt über Dutzende von Megabyte davon, ein ARM, der in einem Jetson NVidia SoC ausgeführt wird, dagegen nicht.
  • Welche FFT-Größe hat Ihre Grafikkarte? Die Anzahl der parallelen Threads, ihre Flexibilität und die Speicherbandbreite zwischen den Karten unterscheiden sich erheblich.
  • Was ist überhaupt eine Metrik für "gut"? Nur ein seltsames Verhältnis von Durchsatz und Latenz, aber vielleicht auch Energie und die Möglichkeit, die richtigen Ressourcen für andere Arbeiten frei zu lassen?
  • Was ist Ihre CPU <-> Hauptspeicherschnittstelle? Handelt es sich um eine Vierkanal-DDR4-Schnittstelle mit fast 2 GHz oder um eine Einkanal-DDR?
  • Was ist Ihre GPU <-> GPU-Speicherschnittstelle?
  • Was ist Ihre GPU <-> Hauptspeicherschnittstelle?
  • Wie gut funktioniert Ihre CPU <-> GPU-Kommunikation für Ihren speziellen Anwendungsfall?
  • Ist beispielsweise der PCIe-Bus stark belastet, weil derselbe PCIe-Switch die Daten verarbeiten muss, die in Ihr Hochgeschwindigkeitssystem und aus diesem heraus fließen (z. B. Speicher, aber wahrscheinlicher 10-Gigabit-Ethernet- oder Videodaten)? ?

Die Antwort wird wahrscheinlich nicht zufriedenstellend sein, aber es ist wirklich:

Irgendwo über 64 Bins, irgendwo unter 2 20 Bins für eine FFT mit einfacher Genauigkeit. Es hängt davon ab, ob.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.