本文共 18098 字,大约阅读时间需要 60 分钟。
This page shows how miniz.c v1.10 compares to several other popular open source lossless data compression codecs at compression level 9 (max compression), with two examples at level 1 (fastest compression) on enwik8 and enwik9. The data here was generated using a slightly modified and enhanced version of project, compiled to x64.
On a Core i7 3.2 GHz, miniz.c's typical decompression rate is around 175-250 MB/sec., and its typical compression rate is anywhere from 14-120.5MB/s (actual rates depend on the compression level, as well as the compressibility and redundancy present in the source data). The x64 version of the decompressor is faster than the x86 version, sometimes up to 20%, mostly due to good register utilization. miniz.c's inflater can be optionally configured to use a 64-bit bitbuffer on 64-bit CPU's, and unaligned 16 and 32-bit loads on little endian platforms (the tests below had both optimizations enabled).
For comparison purposes, I've added 's Inflater implementation to compresssiontest, and alpha7. Note that miniz.c is used for compressing the data supplied to stb_image.c for decompression (stb_image.c does not include a compressor, contains a simple compressor but I haven't tested it yet). Also, stb_image.c does not compute an checksum of the uncompressed data, and miniz.c and zlib do, so stb's actual "apples to apples" performance is a little lower than reported here. (Approximately 10% of miniz.c's decompression time is spent computing the Adler32 checksum. Note, stb_image.c is extremely useful and it inspired miniz.c -- I'm only using it as a point of reference to help compare alternate Inflate implementations against zlib.)
Test machine: Win7 Ultimate x64, Intel Gulftown Core i7 3.2GHz (6 cores, 12 hyperthreads), 24GB of RAM, EVGA X58 motherboard. All code was compiled with Visual Studio 2005.
LZHAM and LZMA where both set to use 512MB dictionary sizes in these tests.
File: (miniz.c compression level 9):
E:\lzham\compressiontest\test_compression>test_compression_x64.exe E:\dev\corpus\enwik8\enwik8x64 versionReading test file 'E:\dev\corpus\enwik8\enwik8' which is 100,000,000 bytes long.---------------------------------------------------------------Testing Compression rate and speed with various compressors.---------------------------------------------------------------Compress:CT_STB :FROM:100,000,000 TO: 36,460,117 63.54% 5,871 MSCompress:CT_MINIZ :FROM:100,000,000 TO: 36,460,117 63.54% 5,872 MSCompress:CT_CRYPTO :FROM:100,000,000 TO: 36,642,772 63.36% 7,501 MSCompress:CT_MINILZO :FROM:100,000,000 TO: 53,481,960 46.52% 868 MSCompress:CT_ZLIB :FROM:100,000,000 TO: 36,475,808 63.52% 7,635 MSCompress:CT_BZIP :FROM:100,000,000 TO: 33,259,584 66.74% 9,444 MSCompress:CT_LIBLZF :FROM:100,000,000 TO: 53,945,398 46.05% 688 MSCompress:CT_LZMA :FROM:100,000,000 TO: 24,797,518 75.20% 86,542 MSCompress:CT_FASTLZ :FROM:100,000,000 TO: 54,163,029 45.84% 738 MSCompress:CT_LZHAM :FROM:100,000,000 TO: 24,814,835 75.19% 29,200 MS---------------------------------------------------------------Testing Decompression speed with various decompressors.---------------------------------------------------------------Decompress:CT_STB :FROM: 36,460,117 TO:100,000,000 731 MSDecompress:CT_MINIZ :FROM: 36,460,117 TO:100,000,000 559 MSDecompress:CT_CRYPTO :FROM: 36,642,772 TO:100,000,000 1,823 MSDecompress:CT_MINILZO :FROM: 53,481,960 TO:100,000,000 463 MSDecompress:CT_ZLIB :FROM: 36,475,808 TO:100,000,000 570 MSDecompress:CT_BZIP :FROM: 33,259,584 TO:100,000,000 3,587 MSDecompress:CT_LIBLZF :FROM: 53,945,398 TO:100,000,000 429 MSDecompress:CT_LZMA :FROM: 24,797,518 TO:100,000,000 1,492 MSDecompress:CT_FASTLZ :FROM: 54,163,029 TO:100,000,000 458 MSDecompress:CT_LZHAM :FROM: 24,814,835 TO:100,000,000 848 MS
File: (miniz.c compression level 1 (MZ_BEST_SPEED), zlib set to Z_BEST_SPEED, all other settings are the same as above):
E:\lzham\compressiontest\test_compression>test_compression_x64.exe E:\dev\corpus\enwik8\enwik8x64 versionReading test file 'E:\dev\corpus\enwik8\enwik8' which is 100,000,000 bytes long.---------------------------------------------------------------Testing Compression rate and speed with various compressors.---------------------------------------------------------------Compress:CT_STB :FROM:100,000,000 TO: 48,510,044 51.49% 1,159 MSCompress:CT_MINIZ :FROM:100,000,000 TO: 48,510,044 51.49% 1,158 MSCompress:CT_CRYPTO :FROM:100,000,000 TO: 36,642,772 63.36% 7,501 MSCompress:CT_MINILZO :FROM:100,000,000 TO: 53,481,960 46.52% 868 MSCompress:CT_ZLIB :FROM:100,000,000 TO: 42,298,790 57.70% 2,443 MSCompress:CT_BZIP :FROM:100,000,000 TO: 33,259,584 66.74% 9,431 MSCompress:CT_LIBLZF :FROM:100,000,000 TO: 53,945,398 46.05% 685 MSCompress:CT_LZMA :FROM:100,000,000 TO: 24,797,518 75.20% 86,736 MSCompress:CT_FASTLZ :FROM:100,000,000 TO: 54,163,029 45.84% 739 MSCompress:CT_LZHAM :FROM:100,000,000 TO: 24,813,424 75.19% 29,210 MS---------------------------------------------------------------Testing Decompression speed with various decompressors.---------------------------------------------------------------Decompress:CT_STB :FROM: 48,510,044 TO:100,000,000 987 MSDecompress:CT_MINIZ :FROM: 48,510,044 TO:100,000,000 718 MSDecompress:CT_CRYPTO :FROM: 36,642,772 TO:100,000,000 1,823 MSDecompress:CT_MINILZO :FROM: 53,481,960 TO:100,000,000 463 MSDecompress:CT_ZLIB :FROM: 42,298,790 TO:100,000,000 612 MSDecompress:CT_BZIP :FROM: 33,259,584 TO:100,000,000 3,563 MSDecompress:CT_LIBLZF :FROM: 53,945,398 TO:100,000,000 429 MSDecompress:CT_LZMA :FROM: 24,797,518 TO:100,000,000 1,497 MSDecompress:CT_FASTLZ :FROM: 54,163,029 TO:100,000,000 458 MSDecompress:CT_LZHAM :FROM: 24,813,424 TO:100,000,000 853 MS
File: (miniz.c compression level 9):
E:\lzham\compressiontest\test_compression>test_compression_x64.exe E:\dev\corpus\enwik9\enwik9x64 versionReading test file 'E:\dev\corpus\enwik9\enwik9' which is 1,000,000,000 bytes long.---------------------------------------------------------------Testing Compression rate and speed with various compressors.---------------------------------------------------------------Compress:CT_STB :FROM:1,000,000,000 TO:322,771,589 67.72% 50,859 MSCompress:CT_MINIZ :FROM:1,000,000,000 TO:322,771,589 67.72% 50,869 MSCompress:CT_CRYPTO :FROM:1,000,000,000 TO:324,897,277 67.51% 65,744 MSCompress:CT_MINILZO :FROM:1,000,000,000 TO:477,237,740 52.28% 7,807 MSCompress:CT_ZLIB :FROM:1,000,000,000 TO:322,789,246 67.72% 66,571 MSCompress:CT_BZIP :FROM:1,000,000,000 TO:295,663,950 70.43% 94,037 MSCompress:CT_LIBLZF :FROM:1,000,000,000 TO:492,987,206 50.70% 6,310 MSCompress:CT_LZMA :FROM:1,000,000,000 TO:201,776,574 79.82% 1,043,293 MSCompress:CT_FASTLZ :FROM:1,000,000,000 TO:487,260,768 51.27% 6,748 MSCompress:CT_LZHAM :FROM:1,000,000,000 TO:202,475,460 79.75% 351,687 MS---------------------------------------------------------------Testing Decompression speed with various decompressors.---------------------------------------------------------------Decompress:CT_STB :FROM:322,771,589 TO:1,000,000,000 6,717 MSDecompress:CT_MINIZ :FROM:322,771,589 TO:1,000,000,000 5,050 MSDecompress:CT_CRYPTO :FROM:324,897,277 TO:1,000,000,000 16,770 MSDecompress:CT_MINILZO :FROM:477,237,740 TO:1,000,000,000 4,205 MSDecompress:CT_ZLIB :FROM:322,789,246 TO:1,000,000,000 5,171 MSDecompress:CT_BZIP :FROM:295,663,950 TO:1,000,000,000 33,298 MSDecompress:CT_LIBLZF :FROM:492,987,206 TO:1,000,000,000 4,025 MSDecompress:CT_LZMA :FROM:201,776,574 TO:1,000,000,000 12,650 MSDecompress:CT_FASTLZ :FROM:487,260,768 TO:1,000,000,000 4,223 MSDecompress:CT_LZHAM :FROM:202,475,460 TO:1,000,000,000 7,444 MS
File: (miniz.c compression level 1 (MZ_BEST_SPEED), zlib set to Z_BEST_SPEED, all other settings are the same as above):
E:\lzham\compressiontest\test_compression>test_compression_x64.exe E:\dev\corpus\enwik9\enwik9x64 versionReading test file 'E:\dev\corpus\enwik9\enwik9' which is 1,000,000,000 bytes long.---------------------------------------------------------------Testing Compression rate and speed with various compressors.---------------------------------------------------------------Compress:CT_STB :FROM:1,000,000,000 TO:436,564,069 56.34% 10,417 MSCompress:CT_MINIZ :FROM:1,000,000,000 TO:436,564,069 56.34% 10,418 MSCompress:CT_CRYPTO :FROM:1,000,000,000 TO:324,897,277 67.51% 66,169 MSCompress:CT_MINILZO :FROM:1,000,000,000 TO:477,237,740 52.28% 7,769 MSCompress:CT_ZLIB :FROM:1,000,000,000 TO:378,355,092 62.16% 21,900 MSCompress:CT_BZIP :FROM:1,000,000,000 TO:295,663,950 70.43% 93,694 MSCompress:CT_LIBLZF :FROM:1,000,000,000 TO:492,987,206 50.70% 6,326 MSCompress:CT_LZMA :FROM:1,000,000,000 TO:201,776,574 79.82% 1,043,293 MSCompress:CT_FASTLZ :FROM:1,000,000,000 TO:487,260,768 51.27% 6,756 MSCompress:CT_LZHAM :FROM:1,000,000,000 TO:202,475,460 79.75% 351,687 MS---------------------------------------------------------------Testing Decompression speed with various decompressors.---------------------------------------------------------------Decompress:CT_STB :FROM:436,564,069 TO:1,000,000,000 9,010 MSDecompress:CT_MINIZ :FROM:436,564,069 TO:1,000,000,000 6,530 MSDecompress:CT_CRYPTO :FROM:324,897,277 TO:1,000,000,000 16,786 MSDecompress:CT_MINILZO :FROM:477,237,740 TO:1,000,000,000 4,205 MSDecompress:CT_ZLIB :FROM:378,355,092 TO:1,000,000,000 5,612 MSDecompress:CT_BZIP :FROM:295,663,950 TO:1,000,000,000 33,340 MSDecompress:CT_LIBLZF :FROM:492,987,206 TO:1,000,000,000 3,977 MSDecompress:CT_LZMA :FROM:201,776,574 TO:1,000,000,000 12,650 MSDecompress:CT_FASTLZ :FROM:487,260,768 TO:1,000,000,000 4,214 MSDecompress:CT_LZHAM :FROM:202,475,460 TO:1,000,000,000 7,444 MS
File: Entire Large added to a single uncompressed 7zip archive (miniz.c compression level 9):
E:\lzham\compressiontest\test_compression>test_compression_x64.exe e:\dev\corpus\calgary_corpus.7zx64 versionReading test file 'e:\dev\corpus\calgary_corpus.7z' which is 3,251,898 bytes long.---------------------------------------------------------------Testing Compression rate and speed with various compressors.---------------------------------------------------------------Compress:CT_STB :FROM: 3,251,898 TO: 1,065,470 67.24% 224 MSCompress:CT_MINIZ :FROM: 3,251,898 TO: 1,065,470 67.24% 224 MSCompress:CT_CRYPTO :FROM: 3,251,898 TO: 1,067,241 67.18% 240 MSCompress:CT_MINILZO :FROM: 3,251,898 TO: 1,581,684 51.36% 26 MSCompress:CT_ZLIB :FROM: 3,251,898 TO: 1,059,243 67.43% 353 MSCompress:CT_BZIP :FROM: 3,251,898 TO: 961,353 70.44% 277 MSCompress:CT_LIBLZF :FROM: 3,251,898 TO: 1,593,245 51.01% 20 MSCompress:CT_LZMA :FROM: 3,251,898 TO: 853,241 73.76% 1,570 MSCompress:CT_FASTLZ :FROM: 3,251,898 TO: 1,606,374 50.60% 21 MSCompress:CT_LZHAM :FROM: 3,251,898 TO: 893,578 72.52% 1,028 MS---------------------------------------------------------------Testing Decompression speed with various decompressors.---------------------------------------------------------------Decompress:CT_STB :FROM: 1,065,470 TO: 3,251,898 22 MSDecompress:CT_MINIZ :FROM: 1,065,470 TO: 3,251,898 17 MSDecompress:CT_CRYPTO :FROM: 1,067,241 TO: 3,251,898 54 MSDecompress:CT_MINILZO :FROM: 1,581,684 TO: 3,251,898 14 MSDecompress:CT_ZLIB :FROM: 1,059,243 TO: 3,251,898 17 MSDecompress:CT_BZIP :FROM: 961,353 TO: 3,251,898 104 MSDecompress:CT_LIBLZF :FROM: 1,593,245 TO: 3,251,898 13 MSDecompress:CT_LZMA :FROM: 853,241 TO: 3,251,898 55 MSDecompress:CT_FASTLZ :FROM: 1,606,374 TO: 3,251,898 13 MSDecompress:CT_LZHAM :FROM: 893,578 TO: 3,251,898 39 MS
File: "pic" from the Large (miniz.c compression level 9):
E:\lzham\compressiontest\test_compression>test_compression_x64.exe e:\dev\corpus\large_calgary_corpus\picx64 versionReading test file 'e:\dev\corpus\large_calgary_corpus\pic' which is 513,216 bytes long.---------------------------------------------------------------Testing Compression rate and speed with various compressors.---------------------------------------------------------------Compress:CT_STB :FROM: 513,216 TO: 53,721 89.53% 26 MSCompress:CT_MINIZ :FROM: 513,216 TO: 53,721 89.53% 26 MSCompress:CT_CRYPTO :FROM: 513,216 TO: 57,166 88.86% 18 MSCompress:CT_MINILZO :FROM: 513,216 TO: 86,304 83.18% 2 MSCompress:CT_ZLIB :FROM: 513,216 TO: 52,237 89.82% 96 MSCompress:CT_BZIP :FROM: 513,216 TO: 49,928 90.27% 17 MSCompress:CT_LIBLZF :FROM: 513,216 TO: 80,772 84.26% 1 MSCompress:CT_LZMA :FROM: 513,216 TO: 41,897 91.84% 367 MSCompress:CT_FASTLZ :FROM: 513,216 TO: 81,960 84.03% 1 MSCompress:CT_LZHAM :FROM: 513,216 TO: 47,437 90.76% 515 MS---------------------------------------------------------------Testing Decompression speed with various decompressors.---------------------------------------------------------------Decompress:CT_STB :FROM: 53,721 TO: 513,216 2 MSDecompress:CT_MINIZ :FROM: 53,721 TO: 513,216 2 MSDecompress:CT_CRYPTO :FROM: 57,166 TO: 513,216 4 MSDecompress:CT_MINILZO :FROM: 86,304 TO: 513,216 2 MSDecompress:CT_ZLIB :FROM: 52,237 TO: 513,216 1 MSDecompress:CT_BZIP :FROM: 49,928 TO: 513,216 6 MSDecompress:CT_LIBLZF :FROM: 80,772 TO: 513,216 1 MSDecompress:CT_LZMA :FROM: 41,897 TO: 513,216 4 MSDecompress:CT_FASTLZ :FROM: 81,960 TO: 513,216 1 MSDecompress:CT_LZHAM :FROM: 47,437 TO: 513,216 7 MS
Files: Uncompressed 7zip archive of an Adobe Acrobat Reader 9.0 installation (miniz.c compression level 9):
E:\lzham\compressiontest\test_compression>test_compression_x64.exe e:\dev\corpus\adobe.7zx64 versionReading test file 'e:\dev\corpus\adobe.7z' which is 146,332,683 bytes long.---------------------------------------------------------------Testing Compression rate and speed with various compressors.---------------------------------------------------------------Compress:CT_STB :FROM:146,332,683 TO: 89,281,876 38.99% 9,780 MSCompress:CT_MINIZ :FROM:146,332,683 TO: 89,281,876 38.99% 9,781 MSCompress:CT_CRYPTO :FROM:146,332,683 TO: 91,494,418 37.48% 7,156 MSCompress:CT_MINILZO :FROM:146,332,683 TO:101,687,569 30.51% 1,702 MSCompress:CT_ZLIB :FROM:146,332,683 TO: 89,166,466 39.07% 13,143 MSCompress:CT_BZIP :FROM:146,332,683 TO: 89,072,636 39.13% 20,828 MSCompress:CT_LIBLZF :FROM:146,332,683 TO:106,352,717 27.32% 1,100 MSCompress:CT_LZMA :FROM:146,332,683 TO: 74,361,137 49.18% 59,076 MSCompress:CT_FASTLZ :FROM:146,332,683 TO:105,548,437 27.87% 1,032 MSCompress:CT_LZHAM :FROM:146,332,683 TO: 75,314,840 48.53% 42,354 MS---------------------------------------------------------------Testing Decompression speed with various decompressors.---------------------------------------------------------------Decompress:CT_STB :FROM: 89,281,876 TO:146,332,683 1,119 MSDecompress:CT_MINIZ :FROM: 89,281,876 TO:146,332,683 773 MSDecompress:CT_CRYPTO :FROM: 91,494,418 TO:146,332,683 2,142 MSDecompress:CT_MINILZO :FROM:101,687,569 TO:146,332,683 545 MSDecompress:CT_ZLIB :FROM: 89,166,466 TO:146,332,683 820 MSDecompress:CT_BZIP :FROM: 89,072,636 TO:146,332,683 7,101 MSDecompress:CT_LIBLZF :FROM:106,352,717 TO:146,332,683 565 MSDecompress:CT_LZMA :FROM: 74,361,137 TO:146,332,683 5,259 MSDecompress:CT_FASTLZ :FROM:105,548,437 TO:146,332,683 573 MSDecompress:CT_LZHAM :FROM: 75,314,840 TO:146,332,683 1,761 MS
File: miniz3_v109.zip (a test of how well various codecs handle already compressed data) (miniz.c compression level 9):
E:\lzham\compressiontest\test_compression>test_compression_x64.exe e:\dev\miniz3_v109.zipx64 versionReading test file 'e:\dev\miniz3_v109.zip' which is 417,549 bytes long.---------------------------------------------------------------Testing Compression rate and speed with various compressors.---------------------------------------------------------------Compress:CT_STB :FROM: 417,549 TO: 416,312 0.30% 17 MSCompress:CT_MINIZ :FROM: 417,549 TO: 416,312 0.30% 17 MSCompress:CT_CRYPTO :FROM: 417,549 TO: 417,658 -0.03% 9 MSCompress:CT_MINILZO :FROM: 417,549 TO: 417,760 -0.05% 7 MSCompress:CT_ZLIB :FROM: 417,549 TO: 416,408 0.27% 18 MSCompress:CT_BZIP :FROM: 417,549 TO: 420,125 -0.62% 88 MSCompress:CT_LIBLZF :FROM: 417,549 TO: 429,060 -2.76% 4 MSCompress:CT_LZMA :FROM: 417,549 TO: 420,196 -0.63% 313 MSCompress:CT_FASTLZ :FROM: 417,549 TO: 429,044 -2.75% 3 MSCompress:CT_LZHAM :FROM: 417,549 TO: 417,575 -0.01% 82 MS---------------------------------------------------------------Testing Decompression speed with various decompressors.---------------------------------------------------------------Decompress:CT_STB :FROM: 416,312 TO: 417,549 2 MSDecompress:CT_MINIZ :FROM: 416,312 TO: 417,549 1 MSDecompress:CT_CRYPTO :FROM: 417,658 TO: 417,549 2 MSDecompress:CT_MINILZO :FROM: 417,760 TO: 417,549 1 MSDecompress:CT_ZLIB :FROM: 416,408 TO: 417,549 2 MSDecompress:CT_BZIP :FROM: 420,125 TO: 417,549 28 MSDecompress:CT_LIBLZF :FROM: 429,060 TO: 417,549 2 MSDecompress:CT_LZMA :FROM: 420,196 TO: 417,549 29 MSDecompress:CT_FASTLZ :FROM: 429,044 TO: 417,549 1 MSDecompress:CT_LZHAM :FROM: 417,575 TO: 417,549 2 MS
转载地址:http://thwqb.baihongyu.com/