4 Stimmen

Verarbeitung eines Bildes mit einer CUDA-Implementierung, Python (pycuda) oder C++?

Ich bin in einem Projekt zur Verarbeitung eines Bildes mit CUDA. Das Projekt ist einfach eine Addition oder Subtraktion des Bildes.

Darf ich Sie um Ihre fachliche Meinung bitten, was am besten ist und was die Vor- und Nachteile der beiden sind?

Ich bin für alle Meinungen und/oder Vorschläge dankbar, da dieses Projekt für mich sehr wichtig ist.

6voto

Alexander Gessler Punkte 44223

Allgemeine Antwort: Das spielt keine Rolle. Verwenden Sie die Sprache, mit der Sie sich am wohlsten fühlen.

Denken Sie jedoch daran, dass pycuda nur ein Wrapper um die CUDA C-Schnittstelle ist, so dass es nicht immer auf dem neuesten Stand ist und eine weitere potenzielle Fehlerquelle darstellt.

Python eignet sich hervorragend für Rapid Prototyping, daher würde ich mich persönlich für Python entscheiden. Sie können später immer noch zu C++ wechseln, wenn Sie es brauchen.

3voto

tkerwin Punkte 9061

Wenn der Rest Ihrer Pipeline in Python geschrieben ist und Sie bereits Numpy verwenden, um die Dinge zu beschleunigen, ist pyCUDA eine gute Ergänzung, um teure Operationen zu beschleunigen. Abhängig von der Größe Ihrer Bilder und Ihrem Programmfluss werden Sie mit pyCUDA jedoch möglicherweise keinen allzu großen Geschwindigkeitszuwachs erzielen. Es gibt eine Latenzzeit bei der Weitergabe der Daten über den PCI-Bus, die nur bei großen Datenmengen ausgeglichen wird.

In deinem Fall (Addition und Subtraktion) gibt es in pyCUDA eingebaute Operationen, die du zu deinem Vorteil nutzen kannst. Meiner Erfahrung nach erfordert die Verwendung von pyCUDA für etwas nicht Triviales jedoch eine Menge Wissen darüber, wie CUDA überhaupt funktioniert. Für jemanden, der mit keinerlei CUDA-Kenntnissen beginnt, könnte pyCUDA eine steile Lernkurve darstellen.

2voto

Martin Beckett Punkte 92477

Werfen Sie einen Blick auf openCV Es enthält eine Vielzahl von Bildverarbeitungsfunktionen und alle Hilfsmittel zum Laden/Speichern/Anzeigen von Bildern und zum Betrieb von Kameras.

Es unterstützt jetzt auch CUDA, einige der Bildverarbeitungsfunktionen wurden in CUDA neu implementiert und bieten einen guten Rahmen für die Entwicklung eigener Funktionen.

0voto

peakxu Punkte 6487

Die Antwort von Alex ist richtig. Der Zeitaufwand für den Wrapper ist minimal. Beachten Sie, dass PyCUDA einige nette Metaprogrammierkonstrukte für die Erzeugung von Kerneln hat, die nützlich sein könnten.

Wenn Sie nur Elemente eines Bildes addieren oder subtrahieren wollen, sollten Sie CUDA wahrscheinlich gar nicht verwenden. Die Zeit, die für die Übertragung über den PCI-E-Bus benötigt wird, übersteigt die Einsparungen, die Sie durch die Parallelität erzielen.

Jedes Mal, wenn Sie mit CUDA arbeiten, ist es sinnvoll, über das CGMA-Verhältnis (Verhältnis zwischen Berechnungen und globalem Speicherzugriff) nachzudenken. Ihre Addition/Subtraktion ist nur 1 Fließkommaoperation für 2 Speicherzugriffe (1 Lese- und 1 Schreibzugriff). Aus der Sicht von CUDA ist das sehr ungünstig.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X