14 Nov 2009

Dual Core (Quad Core) und Lame (Upate 2009)

Posted by thomas

Mit Erschrecken habe ich kürzlich festgestellt, dass Lame beim mp3-Encoding scheinbar nur einen Kern nutzt. Das gefällt dem anderen CPU-Kern dann zwar sehr gut, weil dieser faul im Gehäuse hocken kann, aber seinem Besitzer überhaupt nicht. Also erstmal Google angeworfen und gesucht… und siehe da! Es gibt tatsächlich eine Lösung. Ich habe Windows Binaries für Lame gefunden, deren Quellcode speziell auf Multithreading ausgelegt wurde und die dann mit dem Intel Compiler kompiliert wurden. Auf der Homepage dieses Projektes gibt es auch einen Satz Vortragsfolien, die genauer die Hintergründe beleuchten. Da ich euch aber mit so was nicht langweilen möchte lasse ich einfach mal die Zahlen sprechen:
In meinem Vergleich habe ich zwei verschiedene Versionen von Lame gegeneinander antreten lassen: die bisher von mir genutzte Version 3.98 Alpha 4 und die veränderte Version 3.97 Alpha 2, die auf dem Multithreading Code der oben verlinkten Seite basiert und mit dem Intel Compiler kompiliert wurde. Dabei habe ich drei Durchläufe gemacht. Einmal Version 3.98, einmal 3.97 ohne Multithreading und einmal 3.97 mit Multithreading. Als Versuchsdatei habe ich eine 6:15 Minuten langen Ausschnitt aus einem alten Bass&Besser Konzert gewählt, der als 44.1KHz 16Bit Wave vorlag. Die einzigen Encodingeinstellungen waren –new-vbr -V 4. Bei der Multithreading-Variante kam dann noch eine Option zum Aktivieren bzw. Deaktivieren des Multithreadings hinzu, wie man auch auf den Screenshots sehen kann.
Der Geschwindigkeitsgewinn ist enorm… im Grunde genau wie er sein sollte. Man erhält fast die doppelte Geschwindigkeit im Vergleich zum Single-Thread Encoding:

3.98a4 3.97.ictl No-Multi 3.97.ictl Multi
0:15 Min 0:16 Min 0:09 Min
~23.8x ~22.8x ~40.5x

Update 14.11.2009:
Durch den Kommentar darauf hingewiesen, dass ich meine Messreihe nicht wirklich einheitlich durchgeführt hatte, habe ich mich heute nochmal kurz daran gemacht und eine neue Reihe gemacht. Grundlage war dieses Mal eine ca. 81Mb große WAV Datei mit handelsüblichen 44kHz und 16Bit. Dieses Mal bin ich wirklich einheitlich vorgegangen mit den Parametern –vbr-new -V 4. Bei der Multi-Threaded Version musste natürlich erneut –nores bzw. –nomt zum An- btw. Abschalten des multithreadings gesetzt werden. Die Ergebnisse sind in der nachfolgenden Tabelle zusammengefasst. Auch weiterhin nehmen sich sich 3.97 ohne MT und 3.98b4 nicht viel. Sehr interessant ist die ernorme Geschwindigkeit der 4.0er Alpha. Dieser Build ist aber schon enorm alt und hat durchaus hier und da Probleme gemacht, deshalb habe ich ihn nicht eingesetzt. Schön zu sehen ist auch der leichte Geschwindigkeitszuwachs bei der aktuellen 3.99er Version. Ebenfalls gut zu erkennen ist, dass die multithreaded Variante nicht mit den Kernen skaliert. Die alten Ergebnisse brachten bei zwei Kernen etwa eine Verdopplung der Geschwindigkeit. Bei vier Kernen bleibt es jedoch dabei. Dies legt die Vermutung nahe, dass auch nur ein zweiter Thread und nicht x-viele Threads gerstartet werden.

Lame Vergleich
  3.97mt (no MT) 3.97mt (MT) 3.98b4 3.99a1 4.0a14
Zeit ~18sek ~11sek ~18sek ~16sek ~9sek
Speed ~26x ~42x ~25x ~28x ~46x

Die Messungen wurden auf folgendem System durchgeführt: Intel Q6600, 4Gb DDR2-667, Win 7 64 Bit.

Subscribe to Comments

3 Responses to “Dual Core (Quad Core) und Lame (Upate 2009)”

  1. äh, lame 3982 hast du aber mit v2 laufen lassen, nicht mit v2. das sieht man schon an der höheren bitrate. zumindest laut deinen screenshots.

     

    DerDicke

  2. ähm sorry, hätte mein geschreibsel nochmal durchlesen sollen. wollte sagen: lame 398 hast du mit v2 encoden lassen, lame 397 aber mit v4.

     

    DerDicke

  3. Die Kritik ist berechtigt. Wobei sich da nicht viel ändert. Die 3.98er Version ist im Verhältnis immernoch langsam. Habe heute mal einen neuen Durchlauf gemacht und auch mit der brandaktuellen 3.99er alpha1 verglichen. Füge das jetzt noch ein.

     

    Administrator

Leave a Reply

Message: