Ocena wątku:
  • 2 głosów - średnia: 5
  • 1
  • 2
  • 3
  • 4
  • 5
Test kompresorów - kompresja plików
#1
Start

Poniższy test przedstawia porównanie obecnych programów do pakowania, a co za tym idzie algorytmów pakujących.
Każdy algorytm specjalizuje sie w pakowaniu wybranych danych. Jednym zajmuje to dłużej, drugim krócej. Jedne pakują lepiej drugie gorzej. Test ma na celu wyłonienie zwycięzcy wśród algorytmów kompresujących pod względem stopnia kompresji, oraz efektywności kompresji.

Zawodnicy

Do boju stanęło pięć darmowych i komercyjnych programów pakujących , które wykorzystują różne algorytmy by skompresować dane. Poniżej znajdują sie krótkie opisy programów, oraz zdjęcia z interfejsów.

- 7-Zip 4.65
[Obrazek: 7ziprg5.jpg]

Darmowy kompresor na licencji GNU LGPL.
Program oferuje kompresje w formatach .7z ,oraz .zip z wykorzystaniem różnych algorytmów m.in LZMA, PPMd i BZip2 dla .7z, oraz Deflate, Deflate 64, BZip2 i LZMA dla .zip.
Oferuje także 5 stopni kompresji dla każdego z algorytmów mianowicie Najszybsza, Szybka, Normalna, Najlepsza i Ultra.

- WinUHA 2.0 RC1
[Obrazek: uhago1.jpg]

Darmowy kompresor na licencji freeware stworzony przez Salvatore Ravid?.
Program wykorzystuje algorytm UHARC, a jego pliki są zapisane z rozszerzeniem .uha.
Stopniowanie kompresji odbywa się na zasadzie wyboru wcześniej zoptymalizowanych algorytmów ALZ-1 (szybki), ALZ-2 (normalny), ALZ-3 (wolny), PPM (do tekstów), oraz LZP (szybki) stopni kompresji dla każdego z algorytmów mianowicie Najszybsza, Szybka, Normalna, Najlepsza i Ultra.

- WinAce 2.69
[Obrazek: acevc0.jpg]

Kompresor na licencji komercyjnej. Możemy go używać za darmo przez 30 dni, następnie musimy wykupić licencje bądź zainstalować specjalny dodatek w postaci AdAware i będzie mogli korzystać z programu dalej pod warunkiem olgądania reklam.
Program tworzy archiwa takie jak: Ace (.ace), LZH/LZA (.lzh), MS-Cabinet, (.cab), Zip (.zip), JavaSoft (.jar)
Oferuje 5 stopni kompresji.

- WinRar 3.61
[Obrazek: rarcg7.jpg]

Archiwizer na licencji komercyjnej. Po 40 dniach użytkownia należy wykupić licencje.
Tworzy archiwa ZIP (.zip), oraz RAR (.rar) i oferuje 5 stopni kompresji.

- WinZIP 12.0
[Obrazek: zipcy1.jpg]

Kompresor na licencji komercyjnej. Czas używania wynosi 30 dni. Po tym musimy kupić go za cene 29,95 funtów, która to i tak obecnie jest obniżona ze względu na promocje.
Tworzy tylko jeden rodzaj archiwów tak jak ZIP (.zip). Oferuje kompresje algorytmami SuperFast, Enhanced Deflate, BZip2, LZMA i PPMd. Nie oferuje wyboru stopnia kompresji, jednak posiada ciekawą opcje w której to sam program oddzielnie dla każdego pliku wybiera najkorzystniejszy rodzaj kompresji.


Jak widać, każdy z programów posiada podobny klasyczny interfejs w którym możemy wybrać rodzaj kompresji, stopień kompresji, format pliku i wiele innych parametrów, których podawać tutaj nie będe bo to nie jest celem testu.

Konfiguracja testowa
Płyta główna: Gigabyte GA-N650SLI-DS4
Procesor: Intel E2160 @ 3,15GHz BOX
Pamięci: 2x1GB Geil Ultra DDR2 800MHz CL4
Dysk twardy: Seagate ST3250410AS 250GB
Zasilacz: Amacrox Warrior AX-450PNF

Konfiguracja dość leciwa, aczkolwiek całkiem wydajna jak na owe czasy. Procesor podkręcony z nominalnych 1,8GHz do 3,15GHz, by nieco "odświeżyć" sprzęt.

Warunki testu
Powyższe programy zostały poddane testom w zależności od rodzaju pakowanych danych, oraz algorytmów.
Stopień kompresji w każdym z nich (o ile było to możliwe) został ustawiony na możliwe najwyższy, by uzyskać jak najmniejszy rozmiar pliku wyjściowego.
Test przeprowadzony podczas wyłączenia wszelkich aplikacji, które miałyby wpływ na końcowy wynik.

Test 1 - Kompresja nieskompresowanych losowych plików o rozszerzeniach .exe, .dll, .txt, .php.
Rozmiar plików wynosi 253MB i jest ich 5816. Na jeden plik średnio przypada 44,5KB.

[Obrazek: 7zip7zipmt1.jpg]
LZMA nie pozostawia szans rywalom. Nie dość, że spakowany plik jest najmniejszy to jeszcze jest najszybszy.
BZip2 totalna przepaść względem rywali.

[Obrazek: 7zipzipyd8.jpg]
Trudno oceniać skuteczność algorytmów w rozszerzeniu które jest dla nich ograniczeniem, mowa o .zip.
Najlepiej skompresowało LZMA, kosztem czasu. Deflate zrobiło czynność prawie dwa razy szybciej, przy czym plik ważył jedynie 2,5MB więcej.
Delfate 64 jak widać to troszeczke zmodyfikowany Deflate. Dochodzi kilka sekund, ale delikatnie spada rozmiar pakunku.

[Obrazek: winacenw6.jpg]
Tutaj zdecydowanie prowadzi ACE, najniższy czas kompresji i najlepszy wynik kompresji.
Niewiele gorszy jest od niego MS-Cabinet. Choć czasowo widać sporą różnice.
ZIP i Javasoft robią te ponad 2 razy szybciej od ACE i ponad 3 od MS-Cabinet, ale osiągnięty wynik kompresji pozostawia wiele do życzenia.
LZH/LZA przepaść.

[Obrazek: winuhaii6.jpg]
Algorytm UHARC również pokazuje, że potrafi.
PPM spakował najmocniej, kosztem czasu.
Między ALZ-1, ALZ-2, ALZ-3 nie widać dużej różnicy wagowej, jednak czas zmienia sie znacznie na korzyść ALZ-1.
LZP kompresuje najgorzej, jednak zadziwia niskim czasem kompresji, dość wysoka efektywność.


[Obrazek: winrarsf5.jpg]
Tutaj nie ma widocznego zwycięzcy ZIP jest szybszy, lecz większy rozmiar pakunku.

[Obrazek: winzipsi8.jpg]
WinZip uzyskał taki sam wynik co Zip z WinRara.

[Obrazek: maintest1dr1.jpg]
[Obrazek: test1k.jpg]

Pierwszy test pokazuje, że algorytm LZMA jest naprawde dobry. Powala rywali na kolana.

Test 2 - Kompresja utworów muzycznych skompresowanych stratnie za pomocą kodeka MP3.
Rozmiar plików wynosi 422MB i jest ich 56. Na jeden plik średnio przypada 7,53MB.

Test dość kontrowersyjny, tutaj algorytymy zachowują sie jak chcą.
Nic dziwnego jak skompresować coś, co już wcześniej zostało skompresowane?
Mimo to algorytmy są w stanie znaleźć powtarzające sie ciągi między plikami i potrafią zmniejszyć rozmiar takiego niewdzięcznego materiału jak muzyka MP3.


[Obrazek: 7zip7zipxn7.jpg]
Wyniki jeżeli chodzi o rozmiar bardzo podobny dla każdego z algorytmów. LZMA najefyktywniej.
BZip2 wygrywa pod tym względem, udaje mu sie zejść o 1,6MB niżej. Jednak zajmuje mu to ponad 2,5 raza dłużej.
Nic dziwnego, tutaj już każdy KBajt na wage kilku sekund.

[Obrazek: 7zipzipby6.jpg]
Podobnie jak wyżej. BZip2 najwolniej, ale najciaśniej.
LZMA 6,5 raza szybciej od BZip2, a także pokonuje pod względem czasu i rozmiaru Deflate-y.

[Obrazek: winacelj5.jpg]
MS-Cabinet kompresuje najmocniej, jednak najdłużej.
LZH oferuje bardzo dobrą efektywność, głównie za sprawą niskiego czasu pakowania.

[Obrazek: winuhafn9.jpg]
Tutaj góruje ALZ-2 o dziwo ma minimalnie lepszy wynik od ALZ-3 przy tym pakuje szybciej.
PPM wynik zbliżony do ALZ-ów, czas prawie dwa razy dłuższy.
LZP bardzo zawodzi w tym teście, mało co skompresował.

[Obrazek: winrarfy2.jpg]
RAR skompresował do 0,7MB mniej niż ZIP, jednak różnica w czasie kompresji to prawie 5 razy na korzyść ZIP-a.
Tutaj niestety RAR przegrywa efektywnością.

[Obrazek: winzipil0.jpg]
ZIP z WinZipa wypada tutaj gorzej niż ZIP z WinRara, wynik podobny do RAR-a.

[Obrazek: maintest2ja5.jpg]
[Obrazek: test2p.jpg]
Drugi test ukazuje, że z muzyką najlepiej sobie radzą algorytmy ALZ (szczególnie 2) jeżeli chodzi o stopień kompresji. Warto nadmienić, że nieszczęsny BZip2 zszedł z rozmiarem pakunku prawie do ALZ-a, jednak zajęło mu to troche dłużej.
Jednak jeżeli z braku czasu miałbym jak najlepiej skompresować muzyke wybrałbym z pewnością ZIP-a z WinRara, który z muzyką radzi sobie nadwymiar dobrze.


Test 3 - Kompresja "czystych" plików tekstowych o rozszerzeniach .txt i .doc.
Rozmiar plików wynosi 96,8 i jest ich 1657. Na jeden plik średnio przypada 59,82KB.

[Obrazek: 7zip7zipxx5.jpg]
LZMA spakował najmocniej, całkiem dobrze wypadł tutaj także PPMd.
BZip2 totalna porażka

[Obrazek: 7zipzipns4.jpg]
Znów LZMA góruje nad Deflate-ami jeżeli chodzi o rozmiar, na pocieszenie Deflatom zajmuje to krócej niż LZMA.
BZip2 porażka.

[Obrazek: winacefg6.jpg]
MS-Cabinet i ACE całkiem przyzwoicie spakowały tekst, z tym że ACE to zrobił szybciej.
Ciekawie tutaj wypada ZIP. Stopeiń kompresji nie zachwywca, ale czas to rekompensuje.

[Obrazek: winuhabw4.jpg]
PPM zszedł dość nisko z rozmiarem, jednak zajęło mu to bardzo długo.
Na ALZ-ach widać ładnie jak nieliniowo spada rozmiar archiwum, a rośnie czas.
LZP zaskakuje przyzwoitym stopniem kompresji w kilka razy mniej niż rywale.

[Obrazek: winrargy4.jpg]
Tutaj uwidacznia sie przewaga RARa nad ZIPem. Pakuje sporo więcej, w ciut dłużej.

[Obrazek: winzipmk1.jpg]
ZIP z WinZipa jest skompresowany dużo mocniej, niż ZIP z WinRAR-a.
Jednak zajęło to WinZipowi ponad 2 razy dłużej.

[Obrazek: maintest3fp0.jpg]
[Obrazek: test3m.jpg]
Trzeci test ukazuje, że LZMA jest niezwyciężony. Pod względem kompresji depcze mu po piętach PPM, ale wiele do życzenia pozostawia jego czas kompresji.
LZP ma przeciętny stopień kompresji, jednak bardzo szybko pakuje tekst.

Test 4 - Kompresja zainstalowanej gry, pliki o rozszerzeniach .bmp, .wav, .gtx, .gb, .opl i inne.
Przeważają tutaj nieskompresowane pliki graficzne tekstur i modeli, dźwięków, map i wiele innych.
Rozmiar plików wynosi 1029MB i jest ich 13482. Na jeden plik średnio przypada 78,15KB.

[Obrazek: 7zip7zipze6.jpg]
LZMA rewelacyjny wynik i wagowo i czasowo. Powala konkurentów na łopatki.
BZip2 porażka na całej linii. PPMd również nienajlepiej

[Obrazek: 7zipzipni8.jpg]
Wyniki prezentują sie mizernie. Widać, że format ZIP z 7-Zip nie nadaje sie do pakowania gier.


[Obrazek: winacefr3.jpg]
Tak jak wyżej, wyniki pozostawiają wiele do życzenia. Na prowadzeniu jest ACE. LZH totalna porażka.

[Obrazek: winuhazv1.jpg]
ALZ przyzwoite wyniki. Kolejne ukazanie nielinowej zależność rozmiaru archiwum od czasu.
PPM przypomina ślimaka, dążącego do celu.
LZP kompresje ma przciętną, jednak kolejny test ukazuje, że jest on wydajny. Spakowanie zajmuje mu "chwilkę" w porównaniu do rywali.

[Obrazek: winraraw4.jpg]
RAR pokonuje ZIP-a z kretesem lepszym czasem i lepszą kompresja.

[Obrazek: winzipla1.jpg]
WinZIPowski ZIP cechuje sie lepszą kompresją niż ZIP z WinRAR-a.

[Obrazek: maintest4xu8.jpg]
[Obrazek: test4b.jpg]
Czwarty test pokazał kto rządzi. Kto? Oczywiście LZMA.
ALZom brakuje prawie 1,5% by pokonać LZMA, przy tym sporo gorszy czas.
LZP ma przeciętny stopień kompresji, jednak bardzo szybko pakuje gre.

Stosunek kompresji
Jak sama nazwa wskazuje jest to parametr, który określa jak "mocno" dane zostały skompresowane.
Jest to iloraz rozmiaru spakowanych danych i danych przed kompresją. Przyjmuje wartości (0,100>.
Dla przykładu przy rozmiarze początkowym danych wynoszącym 1000MB i upakowaniu ich do 50MB, stosunek kompresji wynosi 5%.

Efektywność algorytmów - trudny orzech do zgryzienia.
Efektywność algorytmu jest to parametr, który określa jak dany algorytm jest skuteczny.
Określa się go za pomocą stosunku rozmiaru pliku początkowego do iloczynu czasu i rozmiaru pliku końcowego.
W moim teście współczynnik efektywności wygląda tak:
Kod:
r1 - rozmiar poczatkowy
r2 - rozmiar koncowy
t - czas
e = (r1/(r2*t)) * 1000

Pomnożyłem przez 1000, by wyniki były czytelne dla oczu.

Niestety współczynnik nie jest sprawiedliwy dla wszystkich algorytmów, szczególnie tych które pracując według założenia testu w trybie maksymalnej kompresji są porównane do algorytmów, które są optymalizowane do szybkiej kompresji bez możliwości stopniowania poziomu (Ultra, High, Low itd.). Przykładem takiego algorytmu jest LZP.
Jak wiemy rozmiar pakowanych danych nie zmienia się odwrotnie proporcjonalnie względem czasu jaki musi minąć, by te dane upakować. Po chłopsku mówiąc im bardziej chcemy coś upakować tym jeszcze więcej czasu potrzeba.
Ta nieproporcjonalność jest różna dla każdego rodzaju kompresji, oraz rodzaju pakowanych danych.
Zatem, by uczciwe określić efektywność każdego z algorytmów należało by przeprowadzić wszystkie powyższe testy z różnymi stopniami kompresji (Najszybsza, Szybka, Normalna, Najlepsza i Ultra).
Tutaj brak czasu powoduje, że efektywność musi zostać jaka jest, na szczęście nie jest to test, który ma na celu dokładne porównanie każdego z produktów (ma to miejsce w rzeczach zależnych od ceny) tylko wyłonienie zwycięzcy.
Osobiście sprawdziłem, czy LZMA nie zagraża pozycji LZP w efektywności przeprowadzając testy i nie ma takiej obawy.


Podsumowanie - werdykt
Przeprowadzone testy rozwiewają wszelkie wątpliwości co do najlepszego algorytmu, oraz programu pakującego, który umożliwia pakowanie w tym formacie.
Bezkonkurencyjny dla rywali okazał sie algorytm LZMA w formacie .7z, program 7-Zip, który jednocześnie w większości testów oferował najlepszy poziom kompresji przy umiarkowanym czasie pakowania.
Mistrzem efektywności zostaje algorytm LZP, format .uha, program WinUha. W większości testów ma on przeciętny wynik kompresji danych, jednak czas w jakim wykonuje prace jest bardzo niski w porównaniu do innych algorytmów
Jak widać darmowe oprogramowanie potrafi być przynajmniej tak samo dobre jak jego komercyjne odpowiedniki, a często nawet lepsze, ponieważ nad nimi pracuje naprawde ogromna grupa programistów - ochotników.

Najlepszy algorytm pakowania to LZMA dla formatu .7z w 7-Zip
[Obrazek: lzma.png]

Najlepszą efektywność ma LZP dla formatu .uha w WinUha
[Obrazek: lzp.png]

Błąd pomiarowy dla czasów był poniżej 1%, wysoka powtarzalność wyników.
Dla rozmiaru spakowanych danych błąd pomiarowy nie istniał.

Podziękowanie
Chciałbym podziękować koledze ad3k za pomoc przy obróbce wykresów (logo wodne, zapis w formacie JPG), oraz stworzenie obrazków pt. "Rekomendacja".
Chcesz pomóc? Wstaw jako sygnature na innym forum:
[Obrazek: 993a3cb39134bda0.gif]
Kod znajdziesz tutaj: http://forum.pcmod.pl/viewtopic.php?pid=522#p522

Asus P5K WS :: E2160 @ 3,63GHz BOX :: 2x1GB Geil Ultra DDR2 800MHz CL4 :: Galaxy 7600GS 128MB 1.4ns 500/1400 @ 600/1800 16k 03 :: Seagate ST3250410AS 250GB :: Amacrox Warrior AX-450PNF


Wiadomości w tym wątku
[Bez nazwy] - przez Raga - 2009-02-18, 17:41:31
[Bez nazwy] - przez Rimmon - 2009-02-18, 20:04:09
[Bez nazwy] - przez Raga - 2009-02-18, 21:11:32
[Bez nazwy] - przez BartekSzzz - 2009-02-18, 22:41:53

Skocz do:


Użytkownicy przeglądający ten wątek: 1 gości