{"id":144,"date":"2009-11-14T02:36:44","date_gmt":"2009-11-14T01:36:44","guid":{"rendered":"http:\/\/thomas.is-ac.de\/blog\/?p=144"},"modified":"2009-11-14T14:19:40","modified_gmt":"2009-11-14T13:19:40","slug":"dual-core-und-lame","status":"publish","type":"post","link":"http:\/\/familie-gerding.net\/?p=144","title":{"rendered":"Dual Core (Quad Core) und Lame (Upate 2009)"},"content":{"rendered":"<p><img decoding=\"async\" src=\"http:\/\/familie-gerding.net\/pictures\/Lame_logo.jpg\" align=\"left\" hspace=\"5\" vspace=\"5\"\/>Mit Erschrecken habe ich k\u00fcrzlich festgestellt, dass <a href=\"http:\/\/de.wikipedia.org\/wiki\/Lame\" target=\"_blank\">Lame<\/a> beim mp3-Encoding scheinbar nur einen <a href=\"http:\/\/de.wikipedia.org\/wiki\/Prozessorkern\" target=\"_blank\">Kern<\/a> nutzt. Das gef\u00e4llt dem anderen CPU-Kern dann zwar sehr gut, weil dieser faul im Geh\u00e4use hocken kann, aber seinem Besitzer \u00fcberhaupt nicht. Also erstmal Google angeworfen und gesucht&#8230; und siehe da! Es gibt tats\u00e4chlich eine L\u00f6sung. Ich habe Windows Binaries f\u00fcr Lame gefunden, deren Quellcode speziell auf <a href=\"http:\/\/de.wikipedia.org\/wiki\/Multithreading\" target=\"_blank\">Multithreading<\/a> ausgelegt wurde und die dann mit dem Intel Compiler kompiliert wurden. <a href=\"http:\/\/softlab-pro-web.technion.ac.il\/projects\/LAME\/html\/lame.html\" target=\"_blank\">Auf der Homepage dieses Projektes<\/a> gibt es auch einen Satz Vortragsfolien, die genauer die Hintergr\u00fcnde beleuchten. Da ich euch aber mit so was nicht langweilen m\u00f6chte lasse ich einfach mal die Zahlen sprechen:<br \/>\nIn 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\u00e4nderte 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\u00e4ufe 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&#038;Besser Konzert gew\u00e4hlt, der als 44.1KHz 16Bit Wave vorlag. Die einzigen Encodingeinstellungen waren <strong>&#8211;new-vbr -V 4<\/strong>. Bei der Multithreading-Variante kam dann noch eine Option zum Aktivieren bzw. Deaktivieren des Multithreadings hinzu, wie man auch auf den Screenshots sehen kann.<br \/>\nDer Geschwindigkeitsgewinn ist enorm&#8230; im Grunde genau wie er sein sollte. Man erh\u00e4lt fast die doppelte Geschwindigkeit im Vergleich zum Single-Thread Encoding:<\/p>\n<table border=\"1\" width=\"300\" align=\"center\">\n<tr>\n<th style=\"background-color:#aaaaaa;\">3.98a4<\/th>\n<th style=\"background-color:#aaaaaa;\">3.97.ictl No-Multi<\/th>\n<th style=\"background-color:#aaaaaa;\">3.97.ictl Multi<\/th>\n<\/tr>\n<tr>\n<td>0:15 Min<\/td>\n<td>0:16 Min<\/td>\n<td>0:09 Min<\/td>\n<\/tr>\n<tr>\n<td>~23.8x<\/td>\n<td>~22.8x<\/td>\n<td>~40.5x<\/td>\n<\/tr>\n<\/table>\n<div align=\"center\">\n<a href=\"http:\/\/familie-gerding.net\/pictures\/stau_lame398.jpg\" rel=\"lightbox\"><img decoding=\"async\" src=\"http:\/\/familie-gerding.net\/pictures\/stau_lame398_th.jpg\"\/><\/a> <a href=\"http:\/\/familie-gerding.net\/pictures\/stau_lame397no_multi.jpg\" rel=\"lightbox\"><img decoding=\"async\" src=\"http:\/\/familie-gerding.net\/pictures\/stau_lame397no_multi_th.jpg\"\/><\/a> <a href=\"http:\/\/familie-gerding.net\/pictures\/stau_lame397multi.jpg\" rel=\"lightbox\"><img decoding=\"async\" src=\"http:\/\/familie-gerding.net\/pictures\/stau_lame397multi_th.jpg\"\/><\/a>\n<\/div>\n<p><strong>Update 14.11.2009:<\/strong><br \/>\nDurch den Kommentar darauf hingewiesen, dass ich meine Messreihe nicht wirklich einheitlich durchgef\u00fchrt hatte, habe ich mich heute nochmal kurz daran gemacht und eine neue Reihe gemacht. Grundlage war dieses Mal eine ca. 81Mb gro\u00dfe WAV Datei mit handels\u00fcblichen 44kHz und 16Bit. Dieses Mal bin ich wirklich einheitlich vorgegangen mit den Parametern &#8211;vbr-new -V 4. Bei der Multi-Threaded Version musste nat\u00fcrlich erneut &#8211;nores bzw. &#8211;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\u00f6n 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.<\/p>\n<div align=\"center\">\n<table border=\"1\">\n<tr>\n<td colspan=\"6\" align=\"center\">Lame Vergleich<\/td>\n<\/tr>\n<tr>\n<th>&nbsp;<\/th>\n<th>3.97mt (no MT)<\/th>\n<th>3.97mt (MT)<\/th>\n<th>3.98b4<\/th>\n<th>3.99a1<\/th>\n<th>4.0a14<\/th>\n<\/tr>\n<tr>\n<th>Zeit<\/th>\n<td>~18sek<\/td>\n<td>~11sek<\/td>\n<td>~18sek<\/td>\n<td>~16sek<\/td>\n<td>~9sek<\/td>\n<\/tr>\n<tr>\n<th>Speed<\/th>\n<td>~26x<\/td>\n<td>~42x<\/td>\n<td>~25x<\/td>\n<td>~28x<\/td>\n<td>~46x<\/td>\n<\/tr>\n<\/table>\n<\/div>\n<p>Die Messungen wurden auf folgendem System durchgef\u00fchrt: Intel Q6600, 4Gb DDR2-667, Win 7 64 Bit.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Mit Erschrecken habe ich k\u00fcrzlich festgestellt, dass Lame beim mp3-Encoding scheinbar nur einen Kern nutzt. Das gef\u00e4llt dem anderen CPU-Kern dann zwar sehr gut, weil dieser faul im Geh\u00e4use hocken kann, aber seinem Besitzer \u00fcberhaupt nicht. Also erstmal Google angeworfen und gesucht&#8230; und siehe da! Es gibt tats\u00e4chlich eine L\u00f6sung. Ich habe Windows Binaries f\u00fcr [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[],"tags":[],"_links":{"self":[{"href":"http:\/\/familie-gerding.net\/index.php?rest_route=\/wp\/v2\/posts\/144"}],"collection":[{"href":"http:\/\/familie-gerding.net\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/familie-gerding.net\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/familie-gerding.net\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/familie-gerding.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=144"}],"version-history":[{"count":8,"href":"http:\/\/familie-gerding.net\/index.php?rest_route=\/wp\/v2\/posts\/144\/revisions"}],"predecessor-version":[{"id":876,"href":"http:\/\/familie-gerding.net\/index.php?rest_route=\/wp\/v2\/posts\/144\/revisions\/876"}],"wp:attachment":[{"href":"http:\/\/familie-gerding.net\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=144"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/familie-gerding.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=144"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/familie-gerding.net\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=144"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}