PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : HTPC - ffdshow und AVI Synth über CUDA?


robbitop
2008-03-02, 22:05:22
Gerade die guten Bildverbesserungsalgoritmen für HTPCs kosten ja richtig Rechenleistung. Ich kann mir vorstellen, dass sich gerade dort vieles parallelisieren läßt. Darum frage ich mich, warum man diese Aufgabe nicht mittels CUDA einer GPU überläßt. Die hätte ein Vielfaches der Rechenleistung einer CPU und wäre wohl auch deutlich besser geeignet dafür.
Ist sowas wenigstens in Planung? Google sagte mir zu dem Thema seltsamerweise überhaupt nix.

Frank
2008-03-03, 00:51:26
CUDA ist ja nun nVidias Sache. Willst Du andere Grafikkartennutzer ausschließen? Ansich ist die Programmierung ja kein Ding (hatte vor kurzem nen ganzen Tag lang das Vergnügen, mich dazu direkt von Simon Green berieseln zu lassen) aber wahrscheinlich stellt der "VideoProzessor" ;) in heutigen GPUs eh nix anderes dar.?

robbitop
2008-03-03, 01:41:42
Ich sehe keinen Grund, warum man CUDA in Zukunft nicht auch für andere IHVs öffnen sollte. Damit sich GPGPU durchsetzt, braucht man eh eine gemeinsame Basis. Es ist ja wie cg eine Sprache, um die GPU Hardware anzusprechen. CUDA per se ist ein verdammt gutes Konzept und NV hat auch einen sehr guten Dev Support.

Mein Punkt ist, dass man die Filteralgos besser auf den GPUs laufen lassen sollte und man dank D3D10 GPUs auch den passenden Untersatz dafür nun hat. Warum den Kram auf dafür ungeeigneten langsamen CPUs laufen lassen? Es ergibt Sinn und es wäre IMO möglich. Ist das denn schon in Planung?

Der Videoprozessor ist relativ simpel gestrickt und ist nicht viel anderes als eine SIMD ALU mit ein paar fixed functions für den Kram. Für die Filter, die avisynth bietet braucht man weitaus andere Größenordnungen an Rechenleistung, wenn's in Echtzeit sein soll.

Frank
2008-03-03, 08:37:44
Wie sieht denn eine mögliche Abarbeitung aus? Daten von CPU zum Videoprozessor dann wieder zurück zur CPU, welche sie dann zurück zu der GPU schickt um die Filterspielereien durchzuführen und dann wieder zurück zur CPU, welche sie dann zur Bildschirmausgabe an das Videointerface schickt?

Der Mißbrauch der GPU für solcher und anderlei Rechendinge ist ja schön und gut und die Dinger sind ja auch sehr leistungsfähig (spätestens bei vier Teslaboards X-D) aber ihre Stärke stellt vor allem auch die Bandbreite zum eigenen Speicher dar - der Flaschenhals das Interface mit der CPU. PCIe16x ist vielleicht einfach noch zu schmal für solche Videospielereien, wie Du sie Dir vorstellst (oder die GPU nicht flexibel genug). kA

aevil
2008-03-03, 09:55:16
Gerade die guten Bildverbesserungsalgoritmen für HTPCs kosten ja richtig Rechenleistung. Ich kann mir vorstellen, dass sich gerade dort vieles parallelisieren läßt. Darum frage ich mich, warum man diese Aufgabe nicht mittels CUDA einer GPU überläßt. Die hätte ein Vielfaches der Rechenleistung einer CPU und wäre wohl auch deutlich besser geeignet dafür.
Ist sowas wenigstens in Planung? Google sagte mir zu dem Thema seltsamerweise überhaupt nix.
Wenigstens von Mythtv weiss ich sicher das es Postprocessing, nicht jedoch die Dekodierung, über Fragment-shader beschleunigen kann, siehe http://www.gossamer-threads.com/lists/mythtv/commits/253801?search_string=opengl;#253801

robbitop
2008-03-03, 10:51:31
Wie sieht denn eine mögliche Abarbeitung aus? Daten von CPU zum Videoprozessor dann wieder zurück zur CPU, welche sie dann zurück zu der GPU schickt um die Filterspielereien durchzuführen und dann wieder zurück zur CPU, welche sie dann zur Bildschirmausgabe an das Videointerface schickt?

Der Mißbrauch der GPU für solcher und anderlei Rechendinge ist ja schön und gut und die Dinger sind ja auch sehr leistungsfähig (spätestens bei vier Teslaboards X-D) aber ihre Stärke stellt vor allem auch die Bandbreite zum eigenen Speicher dar - der Flaschenhals das Interface mit der CPU. PCIe16x ist vielleicht einfach noch zu schmal für solche Videospielereien, wie Du sie Dir vorstellst (oder die GPU nicht flexibel genug). kA

Die Latenz ist ja erstmal egal. Da man einen Film nicht direkt beeinflußt kann das ganze ruhig mit ein paar Frames Verzögerung ablaufen.
Allerdings wüßte ich nicht, warum das noch dann über den Videoprozessor laufen sollte. Die GPU steht am Ende der Berechnungskette und müßte das Bild rendern und filtern. Die CPU hätte dann kaum noch groß was zu tun außer die Aufgaben an die GPU zu übermitteln. Für diese Datenmenge reicht PEG16x (mittlerweile haben wir ja schon PEG 2.0 was eine Verdopplung von PEG16x entspricht) locker aus.

Die größte Stärke der GPU ist auf alle Fälle ihre Rechenleistung. Da man diese ja auch so schön skalieren kann, kommen dank Shrinks alle 18 Monate GPUs mit in etwa doppelter Rechenleistung heraus. Wann sieht man das schonmal bei CPUs? Mit der Radeon 3870 X2 haben wir ja bereits 1TFLOP/s. Im Herbst bringt die GT200 SLI sicher rund 2-3 TFLOP/s. Mit den SSE Units hat ein 4 GHz Quad-Core in etwa 64 GFLOPS/s. Ende des Jahres liegt also zwischen beiden mal locker Faktor 30. Tendenz steigend.
Die hohe Bandbreite ist natürlich nicht unwichtig, wenn man soviele Rechenoperationen pro Takt schaffen will. ATI hat sogar schon auf der Radeon X1900 einen Encoder programmiert, der einen Großteil der Rechenarbeit auf der R580 erledigte. Richtig toll war das aufgrund der halbherzigen Umsetzung jedoch nicht.

Vieleicht steht GPGPU aber noch zu sehr am Anfang, um da wirklich anzufangen.

deekey777
2008-03-03, 13:08:53
Hier ist eine Präsentation von AMD:
Tuning GPGPU Applications for Performance (http://ati.amd.com/developer/gdc/2007/Hensley-Tuning_GPGPU_Applications_for_Performance(Siggraph07_GPGPUCourse).pdf)

AMD hat schon ein Plugin für Adobe gezeigt, mit dem HDMPEG2-Encoding von der Grafikkarte übernommen wird.
... .
Die hohe Bandbreite ist natürlich nicht unwichtig, wenn man soviele Rechenoperationen pro Takt schaffen will. ATI hat sogar schon auf der Radeon X1900 einen Encoder programmiert, der einen Großteil der Rechenarbeit auf der R580 erledigte. Richtig toll war das aufgrund der halbherzigen Umsetzung jedoch nicht.
Welchen Encoder meinst du? Doch nicht etwa den AVIVO-Encoder?

robbitop
2008-03-03, 13:58:23
Welchen Encoder meinst du? Doch nicht etwa den AVIVO-Encoder?
Oh ya ;(

Ich hoffe, dass die Filtercommunity die Möglichkeiten von GPGPU mal wahrnimmt. Das würde vermutlich zu einem Quantensprung (nicht im physikalischen Sinne!) in Sachen Performance führen.

Endlich richtig gutes Videoprocessing in Echtzeit, ohne dass man einen teuren VP50pro dafür kaufen müßte. (3500$ Endkundenpreis!!)
Und das Teil kann AFAIK nochnichtmal DNM. Ich spreche natürlich nicht von einem billig DNM, wie es in TVs zu finden ist, sondern von einem richtig guten und rechenintensiven Verfahren.

Frank
2008-03-03, 14:43:43
Allerdings wüßte ich nicht, warum das noch dann über den Videoprozessor laufen sollte. Die GPU steht am Ende der Berechnungskette und müßte das Bild rendern und filtern. Und dazwischen hängt jedesmal die CPU. Deine CUDA API bietet die die GPU ja als "Co" Prozessor an und läuft völlig unabhängig der eigentlichen Grafikgeschichte. Schau Dir einfach mal die Ausgänge der Teslaboards an und dann dürfte klar sein, warum der PCIe Slot wohl die meiste Arbeit haben wird - in beide Richtungen. Kann sein, dass ich nicht alle Möglichkeiten kenne und das falsch einschätze aber zumindest täte ich da den Hauptflaschenhals Deines Problems sehen.

Mit der Radeon 3870 X2 haben wir ja bereits 1TFLOP/s.
Augenwischerei. Du kannst ja in diesem Fall gerne CAL nutzen und versuchen den Teraflop zu erreichen. ;)

robbitop
2008-03-03, 14:49:45
Und dazwischen hängt jedesmal die CPU. Deine CUDA API bietet die die GPU ja als "Co" Prozessor an und läuft völlig unabhängig der eigentlichen Grafikgeschichte. Schau Dir einfach mal die Ausgänge der Teslaboards an und dann dürfte klar sein, warum der PCIe Slot wohl die meiste Arbeit haben wird - in beide Richtungen. Kann sein, dass ich nicht alle Möglichkeiten kenne und das falsch einschätze aber zumindest täte ich da den Hauptflaschenhals Deines Problems sehen.
Ich habe mich mit CUDA noch nicht so sehr beschäftigt. Aber ich gehe davon aus, dass solche Sachen auch auf der GPU allein laufen könnten und diese nur noch das Ende der Kette bildet und die CPU nur noch die Drawcalls zur GPU schießt.


Augenwischerei. Du kannst ja in diesem Fall gerne CAL nutzen und versuchen den Teraflop zu erreichen. ;)
Ich rede ja von reiner MAD-Rohleistung. Dass man diese Rohleistungswerte in der Praxis nicht erreicht dürfte klar sein. :)

Frank
2008-03-03, 15:07:23
Ich habe mich mit CUDA noch nicht so sehr beschäftigt. Aber ich gehe davon aus, dass solche Sachen auch auf der GPU allein laufen könnten und diese nur noch das Ende der Kette bildet und die CPU nur noch die Drawcalls zur GPU schießt.Was soll ein G80 Tesla Board mit den Drawcalls machen?

robbitop
2008-03-03, 15:52:54
Was soll ein G80 Tesla Board mit den Drawcalls machen?
Das gleiche was eine GPU mit Drawcalls immer macht. Was spricht dagegen? Ist die Herangehensweise bei CUDA derart limitiert, dass ständig ein Abgleich zwischen GPU und CPU erfolgen muss? Das Ganze würde m.E. mehr Sinn machen, wenn die GPU das Ende der Berechnungskette bildet, so wie es auch beim Rasterzing/Rendern ist.

Sailor Moon
2008-03-03, 20:48:37
Und das Teil kann AFAIK nochnichtmal DNM.
Ein vornehmlich bandbreitentechnisches Problem, auch nimmt kein TV ein 100/120Hz Signal entgegen. Es gab mal von Cinemateq ein auf Philips DNM basierendes Gerät (Zwischenbildberechnung dann für Film, Ausgabe @50/60Hz). Letztlich will der Purist (und das sind die User externer VPs i.d.R.) das aber meist eh nicht. Selbst wenn es gut gemacht ist. Insofern wird es in dem Bereich aus meiner Sicht in absehbarer Zeit keine Zwischenbildberechnungsfunktion geben.

ohne dass man einen teuren VP50pro dafür kaufen müßte. (3500$ Endkundenpreis!!)
HTPC und VP Lösungen kann man ja sowieso eher parallel, denn direkt konkurrierend sehen. Aber wenn es für Erstere weitere Beschleunigungsmöglichkeiten gibt, wäre das in jedem Fall zu begrüßen. Zum VP50Pro bleibt noch zu sagen, dass er MNR und Detail Enhancement bietet, aber keine weiteren Denoisefunktionen. Algolith bietet mit dem FLEA und Mosquito zwei schöne Zusatzlösungen extra für NR an, allerdings weiß ich nicht, wie gut sie sich mit non DCT Material schlagen; zudem sind die Geräte auch nicht eben billig, gerade wenn man bedankt, dass sie einen VP nicht ersetzen, sondern nur ergänzen.

Gruß

Denis

deekey777
2008-04-12, 14:12:15
http://elementaltechnologies.com/products.php

PatkIllA
2008-04-12, 17:27:07
Es wäre ja schon ein Fortschritt, wenn die ganzen Filter und Decoder endlich mal konsequent multithreaded geschrieben würden. Das ist da in der meisten Fällen sogar noch ziemlich einfach und für die Verarbeitung auf der Grafikkarte wahrscheinlich eh nötig.

XxTheBestionxX
2008-04-12, 21:22:27
Hm ich klinke mich mal eben hier rein weil ich auch ne Frage über ffdshow habe.

Also habe mir jetzt ffdshow drauf gemacht und will damit die beste Qualität aus ner DVD rausholen. Habe mich dabei an diese Anleitung gehalten http://www.htpc-info.de/content/view/14/28/

Ist es besser die DVD direkt in die richtige Auflösung skalieren zu lassen also 1360*768 oder 192x1080? Wer kennt noch Einstellungen die das Bild verbessern können? Habe im ATI Treiber deinterlacing mode Vector adaptiv eingestellt und dazu pulldown detection. Ist das so ok oder sollte ich da lieber was anderes einstellen? Bitte um noch nen paar Tipps.

PatkIllA
2008-04-12, 21:26:03
Wenn dein TV die 1360*768 nativ annehmen kann, dann nimm das.
Wenn nicht, dann kannst du das Scaling wahrscheinlich gleich sein lassen, weil der TV dann noch mal skaliert.
Das Deinterlacing der Grafikkarte kommt dabei nicht zum Einsatz und auf echtes Videomaterial kann man ffdshow auch nicht mehr so leicht anwenden.

XxTheBestionxX
2008-04-12, 22:12:08
Also habe meinen LCD an meiner X1800xt an DVI-VGA angeschlossen und im TV gehts auch VGA rein. Im Treiber habe ich dann 1360x768 eingestellt was auch super klappt. Das ganze dann bei 60hz? Ist das ok so?