1- kanzi
2- =====
1+ # kanzi
32
43
54Kanzi is a modern, modular, portable and efficient lossless data compressor implemented in C++.
@@ -45,93 +44,71 @@ Use at your own risk. Always keep a copy of your original files.
4544</a >
4645
4746
48- Silesia corpus benchmark
49- -------------------------
47+ ## Benchmarks
5048
51- i7-7700K @ 4 .20GHz, 32GB RAM, Ubuntu 22.04
49+ Test machine:
5250
53- clang++ 14.0.0, tcmalloc
51+ AWS c5a8xlarge: AMD EPYC 7R32 (32 vCPUs), 64 GB RAM
5452
55- Kanzi version 2.1 C ++ implementation. Block size is 100 MB.
53+ clang ++ 14.0.0-1ubuntu1.1
5654
55+ Ubuntu 22.04.3 LTS
56+
57+ Kanzi version 2.2 C++ implementation. Default block size.
58+
59+ On this machine kanzi can use up to 16 threads depending on compression level
60+ (the default block size at level 9 is 32MB, severly limiting the number of threads
61+ in use, especially with enwik8, but all tests are performed with default values).
62+ bzip3 uses 16 threads. zstd can use 2 for compression, other compressors
63+ are single threaded.
64+
65+
66+ ### silesia.tar
5767
5868| Compressor | Encoding (sec) | Decoding (sec) | Size |
5969| ---------------------------------| -----------------| -----------------| ------------------|
60- | Original | | | 211,938,580 |
61- | ** Kanzi -l 1 -j 1** | ** 1.1** | ** 0.5** | ** 69,399,477** |
62- | ** Kanzi -l 1 -j 6** | ** 0.4** | ** 0.2** | ** 69,399,477** |
63- | Pigz 2.6 -5 -p6 | 1.0 | 0.7 | 69,170,603 |
64- | Gzip 1.10 -5 | 4.8 | 1.0 | 69,143,980 |
65- | Zstd 1.5.3 -2 --long=30 | 0.9 | 0.5 | 68,694,316 |
66- | Zstd 1.5.3 -2 -T6 --long=30 | 0.4 | 0.3 | 68,694,316 |
67- | Brotli 1.0.9 -2 --large_window=30| 1.5 | 0.8 | 68,033,377 |
68- | Pigz 2.6 -9 -p6 | 3.0 | 0.6 | 67,656,836 |
69- | Gzip 1.10 -9 | 15.5 | 1.0 | 67,631,990 |
70- | Brotli 1.0.9 -4 --large_window=30| 4.1 | 0.7 | 64,267,169 |
71- | ** Kanzi -l 2 -j 1** | ** 2.3** | ** 0.7** | ** 63,808,747** |
72- | ** Kanzi -l 2 -j 6** | ** 0.9** | ** 0.3** | ** 63,808,747** |
73- | Zstd 1.5.3 -9 --long=30 | 3.7 | 0.3 | 59,272,590 |
74- | Zstd 1.5.3 -9 -T6 --long=30 | 2.3 | 0.3 | 59,272,590 |
75- | ** Kanzi -l 3 -j 1** | ** 3.5** | ** 1.3** | ** 59,199,795** |
76- | ** Kanzi -l 3 -j 6** | ** 1.2** | ** 0.4** | ** 59,199,795** |
77- | Orz 1.5.0 | 7.7 | 2.0 | 57,564,831 |
78- | Brotli 1.0.9 -9 --large_window=30| 36.7 | 0.7 | 56,232,817 |
79- | Lzma 5.2.2 -3 | 24.1 | 2.6 | 55,743,540 |
80- | ** Kanzi -l 4 -j 1** | ** 6.2** | ** 4.2** | ** 54,998,198** |
81- | ** Kanzi -l 4 -j 6** | ** 2.0** | ** 1.2** | ** 54,998,198** |
82- | Bzip2 1.0.6 -9 | 14.9 | 5.2 | 54,506,769 |
83- | Zstd 1.5.3 -19 --long=30 | 62.0 | 0.3 | 52,828,057 |
84- | Zstd 1.5.3 -19 -T6 --long=30 | 62.0 | 0.4 | 52,828,057 |
85- | ** Kanzi -l 5 -j 1** | ** 11.3** | ** 4.5** | ** 51,760,244** |
86- | ** Kanzi -l 5 -j 6** | ** 3.6** | ** 1.5** | ** 51,760,244** |
87- | Brotli 1.0.9 --large_window=30 | 356.2 | 0.9 | 49,383,136 |
88- | Lzma 5.2.2 -9 | 65.6 | 2.5 | 48,780,457 |
89- | ** Kanzi -l 6 -j 1** | ** 13.6** | ** 6.2** | ** 48,068,000** |
90- | ** Kanzi -l 6 -j 6** | ** 4.2** | ** 2.1** | ** 48,068,000** |
91- | bsc 3.2.3 -b100 -T -t | 8.8 | 6.0 | 46,932,394 |
92- | bsc 3.2.3 -b100 | 5.4 | 4.9 | 46,932,394 |
93- | BCM 1.65 -b100 | 15.5 | 21.1 | 46,506,716 |
94- | ** Kanzi -l 7 -j 1** | ** 16.7** | ** 11.1** | ** 46,447,003** |
95- | ** Kanzi -l 7 -j 6** | ** 5.2** | ** 3.7** | ** 46,447,003** |
96- | Tangelo 2.4 | 83.2 | 85.9 | 44,862,127 |
97- | zpaq v7.14 m4 t1 | 107.3 | 112.2 | 42,628,166 |
98- | zpaq v7.14 m4 t12 | 108.1 | 111.5 | 42,628,166 |
99- | ** Kanzi -l 8 -j 1** | ** 47.8** | ** 49.4** | ** 41,821,127** |
100- | ** Kanzi -l 8 -j 6** | ** 15.8** | ** 15.5** | ** 41,821,127** |
101- | Tangelo 2.0 | 302.0 | 310.9 | 41,267,068 |
102- | ** Kanzi -l 9 -j 1** | ** 72.4** | ** 74.5** | ** 40,361,391** |
103- | ** Kanzi -l 9 -j 6** | ** 26.1** | ** 26.9** | ** 40,361,391** |
104- | zpaq v7.14 m5 t1 | 343.1 | 352.0 | 39,112,924 |
105- | zpaq v7.14 m5 t12 | 344.3 | 350.4 | 39,112,924 |
106-
107-
108-
109- enwik8
110- -------
111-
112- i7-7700K @4 .20GHz, 32GB RAM, Ubuntu 22.04
113-
114- clang++ 14.0.0, tcmalloc
115-
116- Kanzi version 2.1 C++ implementation. Block size is 100 MB. 1 thread
117-
118-
119- | Compressor | Encoding (sec) | Decoding (sec) | Size |
120- | -----------------------------| -----------------| -----------------| ------------------|
121- | Original | | | 100,000,000 |
122- | ** Kanzi -l 1 -j 1** | ** 0.78** | ** 0.33** | ** 37,969,539** |
123- | ** Kanzi -l 2 -j 1** | ** 1.65** | ** 0.56** | ** 30,953,719** |
124- | ** Kanzi -l 3 -j 1** | ** 2.02** | ** 0.80** | ** 27,362,969** |
125- | ** Kanzi -l 4 -j 1** | ** 3.37** | ** 2.18** | ** 25,670,924** |
126- | ** Kanzi -l 5 -j 1** | ** 5.14** | ** 1.82** | ** 22,490,875** |
127- | ** Kanzi -l 6 -j 1** | ** 6.88** | ** 2.80** | ** 21,232,300** |
128- | ** Kanzi -l 7 -j 1** | ** 8.80** | ** 5.02** | ** 20,935,519** |
129- | ** Kanzi -l 8 -j 1** | ** 18.84** | ** 18.95** | ** 19,671,786** |
130- | ** Kanzi -l 9 -j 1** | ** 28.25** | ** 29.03** | ** 19,097,946** |
131-
132-
133- Build Kanzi
134- -----------
70+ | Original | | | 211,957,760 |
71+ | ** Kanzi -l 1** | ** 0.284** | ** 0.185** | ** 80,284,705** |
72+ | Zstd 1.5.5 -2 | 0.761 | 0.286 | 69,590,245 |
73+ | ** Kanzi -l 2** | ** 0.310** | ** 0.215** | ** 68,231,498** |
74+ | Brotli 1.1.0 -2 | 1.749 | 2.459 | 68,044,145 |
75+ | Gzip 1.10 -9 | 20.15 | 1.316 | 67,652,229 |
76+ | ** Kanzi -l 3** | ** 0.501** | ** 0.261** | ** 64,916,444** |
77+ | Zstd 1.5.5 -5 | 2.003 | 0.324 | 63,103,408 |
78+ | ** Kanzi -l 4** | ** 0.668** | ** 0.353** | ** 60,770,201** |
79+ | Zstd 1.5.5 -9 | 4.166 | 0.282 | 59,444,065 |
80+ | Brotli 1.1.0 -6 | 14.53 | 4.263 | 58,552,177 |
81+ | Zstd 1.5.5 -15 | 19.15 | 0.276 | 58,061,115 |
82+ | Brotli 1.1.0 -9 | 70.07 | 7.149 | 56,408,353 |
83+ | Bzip2 1.0.8 -9 | 16.94 | 6.734 | 54,572,500 |
84+ | ** Kanzi -l 5** | ** 1.775** | ** 0.920** | ** 54,051,139** |
85+ | Zstd 1.5.5 -19 | 92.82 | 0.302 | 52,989,654 |
86+ | ** Kanzi -l 6** | ** 2.614** | ** 1.289** | ** 49,517,823** |
87+ | Lzma 5.2.5 -9 | 92.6 | 3.075 | 48,744,632 |
88+ | ** Kanzi -l 7** | ** 2.723** | ** 2.175** | ** 47,308,484** |
89+ | bzip3 1.3.2.r4-gb2d61e8 -j 16 | 2.682 | 3.221 | 47,237,088 |
90+ | ** Kanzi -l 8** | ** 7.487** | ** 7.875** | ** 43,247,248** |
91+ | ** Kanzi -l 9** | ** 19.29** | ** 19.43** | ** 41,807,179** |
92+ | zpaq 7.15 -m5 -t16 | 213.8 | 213.8 | 40,050,429 |
93+
94+
95+ ### enwik8
96+
97+ | Compressor | Encoding (sec) | Decoding (sec) | Size |
98+ | ------------------------| ------------------| ------------------| ------------------|
99+ | Original | | | 100,000,000 |
100+ | ** Kanzi -l 1** | ** 0.189** | ** 0.107** | ** 43,747,730** |
101+ | ** Kanzi -l 2** | ** 0.192** | ** 0.120** | ** 37,745,093** |
102+ | ** Kanzi -l 3** | ** 0.321** | ** 0.146** | ** 33,839,184** |
103+ | ** Kanzi -l 4** | ** 0.349** | ** 0.198** | ** 29,598,635** |
104+ | ** Kanzi -l 5** | ** 0.570** | ** 0.342** | ** 26,527,955** |
105+ | ** Kanzi -l 6** | ** 0.710** | ** 0.554** | ** 24,076,669** |
106+ | ** Kanzi -l 7** | ** 1.789** | ** 1.619** | ** 22,817,376** |
107+ | ** Kanzi -l 8** | ** 4.639** | ** 4.748** | ** 21,181,978** |
108+ | ** Kanzi -l 9** | ** 12.71** | ** 13.28** | ** 20,035,133** |
109+
110+
111+ ## Build Kanzi
135112
136113The C++ code can be built on Windows with Visual Studio, Linux, macOS and Android with g++ and/or clang++.
137114There are no dependencies. Porting to other operating systems should be straightforward.
@@ -145,25 +122,25 @@ Unzip the file "Kanzi_VS2022.zip" in place.
145122The solution generates a Windows 64 binary and library. Multithreading is supported with this version.
146123
147124### mingw-w64
148- Go to the source directory and run 'make clean && mingw32-make.exe'. The Makefile contains
125+ Go to the source directory and run 'make clean && mingw32-make.exe kanzi '. The Makefile contains
149126all the necessary targets. Tested successfully on Win64 with mingw-w64 g++ 8.1.0.
150127Multithreading is supportedwith g++ version 5.0.0 or newer.
151128Builds successfully with C++11, C++14, C++17.
152129
153130### Linux
154- Go to the source directory and run 'make clean && make'. The Makefile contains all the necessary
131+ Go to the source directory and run 'make clean && make kanzi '. The Makefile contains all the necessary
155132targets. Build successfully on Ubuntu with many versions of g++ and clang++.
156133Multithreading is supported with g++ version 5.0.0 or newer.
157134Builds successfully with C++98, C++11, C++14, C++17, C++20.
158135
159136### MacOS
160- Go to the source directory and run 'make clean && make'. The Makefile contains all the necessary
137+ Go to the source directory and run 'make clean && make kanzi '. The Makefile contains all the necessary
161138targets. Build successfully on Ubuntu with many versions of clang++.
162139Multithreading is supported.
163140
164141### BSD
165142The makefile uses the gnu-make syntax. First, make sure gmake is present (or install it: 'pkg_add gmake').
166- Go to the source directory and run 'gmake clean && gmake'. The Makefile contains all the necessary
143+ Go to the source directory and run 'gmake clean && gmake kanzi '. The Makefile contains all the necessary
167144targets. Multithreading is supported.
168145
169146### Makefile targets
0 commit comments