Wir haben eine Datenbank mit Huffman-Codierung codiert. Ziel ist es, die GPU mit dem zugehörigen Decoder zu kopieren; dann auf der GPU, dekodieren Sie die Datenbank und machen Sie Sachen auf dieser entschlüsselten Datenbank, ohne sie auf der CPU zu kopieren.Ist es möglich, Huffman-Decodierung in GPU zu erreichen?
Ich bin weit entfernt ein Huffman-Spezialist zu sein, aber die wenigen, die ich kenne, zeigen, dass es ein Algorithmus zu sein scheint, der im Wesentlichen auf Kontrollstrukturen basiert. Mit dem grundlegenden Algorithmus fürchte ich, dass es viele serialisierte Operationen geben wird.
My 2 Fragen sind:
- wissen Sie, wenn es eine effiziente GPU-Version für Huffman Codierung existiert
- wenn nicht, glauben Sie, dass es einen Huffman-Algorithmus existiert, die auf GPU (dh angepasst werden. mit weniger Kontrollstrukturen). Oder vielleicht wissen Sie (und Sie könnten eine Referenz angeben), dass effiziente Huffman-Decodierung auf GPU nicht effizient sein kann.
Ich sehe andere Einschränkungen, aber sie sind nicht kritisch: - GPU nicht sehr effizient sein könnte zu handhaben Baum: Binärbaum kann in einem klassischer Array gespeichert werden - Arbeitsbelastung könnte schwierig sein, zu balancieren: Wir werden siehe nach
Ich bezweifle, dass Sie einen wirklichen Vorteil sehen, wenn Sie dies auf einer GPU - CUDA oder anders implementieren. GPUs sind wirklich nur gut für eine Teilmenge von Problemen, bei denen Parallelität und homogener Betrieb an mehreren Datenpunkten vorhanden sind. –
Huffman, wie ich weiß, ist komplett seriell. Sie können den zu decodierenden Code überhaupt nicht aufteilen, da Sie nicht wissen, wo eine Pause liegt, bis Sie den gesamten Code vor dem Abbruch verarbeitet haben. –
Eine Beispielimplementierung (verbunden) auf iOS Metal zeigt, dass das gleichzeitige Dekodieren mehrerer Blöcke viel schneller ist als das Ausführen der Logik auf der CPU. Man muss eine Nachschlagetabelle pro Block erstellen, daher gibt es ein bisschen Overhead. Siehe https://StackOverflow.com/a/47954985/763355 – MoDJ