Multiprozessorsystem Encoding

  • Hab da ein paar Fragen:

    1. gibt's ein Tool was ordentlich MultiProzessorsysteme beim Encoden auslastet/verwendet? (OS ist mir egal)

    2. gibt's ne h264 Implementation die ordentlich auf MultiProzessorsystemen läuft udn diese auch ausnutzt?

    Cu Selur

    Ps.: Frage da ich demnächst mal ein paar Tage auf ein 8er P4 3Ghz Kistchen Zugriff für private Zwecke hab. ;)

  • Wegen der Auslastung: Ich glaube die ist relativ egal, bei mir sinkt zB. die Auslastung auch auf 50-60% bei HT.
    Trotzdem ist das Encoden aber ein deutliches Stück schneller als wenn ich HT deaktiviere und 100% Auslastung habe.

  • Ich kann mir nicht vorstellen, das HT bei einem Single-Prozessor was / viel bringt. Mehr als 100% CPU-Zeit kann ich ja nun nicht haben. Ob ich dann 2 Prozesse mit jeweils 50% laufen lasse, oder 1 mit 100% sollte doch wohl auf´s Gleiche rauskommen, oder? Einzig eine "Codeoptimierung" könnte was bringen... HT bringt doch nur wirklich was, wenn der Prozessor nicht zu 100% ausgelastet ist, dann kann er die restlichen 40% (wenn 60% nur verwendet werden) für was Anderes nutzen.

    fps, die Auslastung sinkt wohl deswegen, weil er ja dann 2 Prozesse hat (quasi 2 CPUs vorgaukelt - kann man ganz gut mit dem MotherBoardMonitor sehen - der denkt auch, ich hätte 2 CPUs und bringt dann bei Volllast immer zwischen 40-60% bei dem einen "Proz." und dann entsprechend mehr oder weniger bei dem and (was dann aber zusammen 100% ergibt).
    Was sicher Sinn ergeben würde, wenn zwei unabhängige CPUs sich die Aufgabe teilen, dann sollte bei entspr. Programmen die Geschwindigkeit nahezu doppelt sein.

    Also, ich habe an sich immer Volllast, wenn ich encodiere oder transcodiere... -> ansonsten könnte er ja auch schneller das ganze kodieren :D

  • Komisch,ich habe HT an und eine Auslastung von 100%...,na ja bei Programmen die HT unterstützen,wirds schon was bringen..


    cu
    wulf

  • Na ja, wenn ich eine Sache mache, dann sicher nicht. Wenn ich jedoch zwei unterschiedliche Sachen mache, bei der beide z.B. nicht 100% die CPU brauchen, dann bringt das sicher was, aber ich denke mal, nur dann. Denn, wenn ein Prozess nur 50% bringt, der andere auch, obwohl beide mehr bringen würden, dann sehe ich darin keinen Sinn. Dann mache ich zwar zwei Sachen parallel, bin aber im Endeffekt nicht schneller fertig, als wenn ich jeweils den einen Prozess mit Volllast fahre und den and. dann hinterher. BS und Programme müssen das eh mitmachen, und Windows-Systeme wie W2K / XP sollen das wohl unterstützen, aber auch wohl nicht richtig oder nur zum Teil. Mein Windows ist auf jeden Fall durch HT nicht schneller geworden, der Rest auch nicht, der 100% CPU-Last braucht :D

  • Selur

    Soweit mir bekannt, gibt es momentan kein Encoder Progi, dass wirklichen Dualprozessorbetrieb unterstützt. Wenn es eines könnte, würde damit auch ordentlich Werbung gemacht.

    P4 mit HT ist nur virtueller Dualprezessor. Aber auch da müssen die Progis dafür geschrieben sein.

    Wer lesen kann, ist klar im Vorteil.

  • Ich bin auch schon lang auf der Suche nach so was... Was mir auch gut reinlaufen würde: auf mehrere Rechner verteiltes Encoding - ich meine Gigabit-Ethernet steht vor der Tür, da sind dann auch die MPEG2-Rohdaten kein Problem mehr.

    VirtualDubMod hat(te?) das mal ansatzweise implementiert, weiß aber nicht wie's darum steht.

    Zur Not musst du halt einfach acht Filme gleichzeitig auf jeweils einem Prozessor encoden, um das System ordentlich auszulasten - allerdings sollte es dann auch schon ein RAID mit min. 10 Platten sein, das die Daten liefert - und unter 320er SCSI brauchst dann auch nicht anzufangen ;)

    Gruß, fileman.

  • vllt. so:

    den first pass ganz normal ausfuehren.

    und fuer den 2nd pass einfach 8 instanzen von VDub starten, die jeweils ein anderes schnipsel des Videos encoden.
    danach die teile einfach per DSCopy zusammenbasteln.

    (btw: ich hab hier seit kurzem einen Dual P1-100MHz mit 40MB RAM den ich fuer immer fuer Priv. Zwecke nutzen kann :zunge: )

  • Man kann doch sicher unter Linux die MPEG2 Decoder Ausgabe per Pipe an einen MPEG4 Encoder übergeben, dass würde doch 2 Prozesse erzeugen, oder?

    Zitat

    Ich bin auch schon lang auf der Suche nach so was... Was mir auch gut reinlaufen würde: auf mehrere Rechner verteiltes Encoding - ich meine Gigabit-Ethernet steht vor der Tür, da sind dann auch die MPEG2-Rohdaten kein Problem mehr.

    VirtualDubMod hat(te?) das mal ansatzweise implementiert, weiß aber nicht wie's darum steht.


    Man könnte doch unter AVISynth eine Server und Client Plugin programmieren. Ein Rechner Decodiert dann MPEG2 und filtert noch falls nötig, am Ende vom Script kommt dann noch "AVIServer(clip, port=1234)" rein. Auf dem anderem Rechner nur ein "clip = AVIClient(ip=123.45.67.89, port=1234)" Script, auf beiden Rechner das Script unter VDubMod einplanen und gleizeitig starten. Der Client wartet einfach bis der Server da ist. Ich hab noch wenig mit Sockets unter C und Windows gemacht, aber das sollte doch eigentlich kein Problem sein, oder?

  • Man müsste eben nach dem ersten Pass auf alle Teile warten (wenn man die nach Rechenleistung der einzelnen Rechner anteilig verteilt, dürfte das nicht allzu viel Zeit verschwenden). Dann müsste ein Rechner (der "Master") die Bitrate-Verteilung berechnen und schließlich wieder mehrere "Chunks" an die Clients zuweisen, die dann anfangen zu ackern. Alles in allem aber doch recht aufwändig.

    Gruß, fileman.

  • Hi all, mal etwas nicht ganz ernst gemeint:

    Wer braucht in zukunft noch CPU power zum video encoden?

    siehe hier
    Nvidia stellt mit 3D-Chip GeForce 6800 Ultra neue Rekorde auf
    http://www.heise.de/newsticker/meldung/46461

    dazu ein auszug
    aus dem Text
    ...
    Schließlich spendiert Nvidia noch einen programmierbaren Video-Prozessor, der die Formate MPEG-1, -2 und -4 sowie WMV9 und DivX nicht nur dekodiert, sondern auch erzeugt.
    ...

    Mit schlappen 100Watt (und 550 Euro) seid Ihr dabei!
    :)

    gruss
    Hans

  • Sh0dan hilft mal wieder. Und zwar mit TCPDeliver.

    Es ist ein AviSynth-Filter, um per Server/Client übers Netzwerk Daten zu verschicken. Dies lässt sich auf zweierlei Arten einsetzen:

    • Der erste (/ die ersten) Rechner macht die Arbeit vom AviSynth-Skript (Dekodieren, Filtern etc.), dann werden die Daten übers Netzwerk geschickt und der letzte Rechner in der Kette kodiert die Daten. Da es aber eine Menge Daten sind, reicht noch nicht mal ein 1-Gigabit-Netzwerk aus. Es macht also nur Sinn, wenn man viel filtert.
    • Es gibt nur einen Rechner, der aber über zwei CPUs verfügt. Hier kann man das AviSynth-Skript auf der einen CPU laufen lassen und die Kodierung auf der anderen CPU.


    Schade bei der ganzen Sache ist, dass der Filter noch eine echte Alpha ist.

    Gruß
    Arlsair

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!