[981e22c] | 1 | =========================== |
---|
| 2 | Release notes for C-Blosc |
---|
| 3 | =========================== |
---|
[00587dc] | 4 | |
---|
| 5 | :Author: Francesc Alted |
---|
[981e22c] | 6 | :Contact: [email protected] |
---|
[00587dc] | 7 | :URL: http://www.blosc.org |
---|
| 8 | |
---|
| 9 | |
---|
[981e22c] | 10 | Changes from 1.10.0 to 1.10.1 |
---|
| 11 | ============================= |
---|
| 12 | |
---|
| 13 | #XXX version-specific blurb XXX# |
---|
| 14 | |
---|
| 15 | |
---|
| 16 | Changes from 1.9.3 to 1.10.0 |
---|
| 17 | ============================ |
---|
| 18 | |
---|
| 19 | - Initial support for Zstandard (0.7.4). Zstandard (or Zstd for short) is a new |
---|
| 20 | compression library that allows better compression than Zlib, but that works |
---|
| 21 | typically faster (and some times much faster), making of it a good match for |
---|
| 22 | Blosc. |
---|
| 23 | |
---|
| 24 | Although the Zstd format is considered stable |
---|
| 25 | (http://fastcompression.blogspot.com.es/2016_07_03_archive.html), its API is |
---|
| 26 | maturing very fast, and despite passing the extreme test suite for C-Blosc, |
---|
| 27 | this codec should be considered in beta for C-Blosc usage purposes. Please |
---|
| 28 | test it and report back any possible issues you may get. |
---|
| 29 | |
---|
| 30 | |
---|
| 31 | Changes from 1.9.2 to 1.9.3 |
---|
| 32 | =========================== |
---|
| 33 | |
---|
| 34 | - Reverted a mistake introduced in 1.7.1. At that time, bit-shuffling |
---|
| 35 | was enabled for typesize == 1 (i.e. strings), but the change also |
---|
| 36 | included byte-shuffling accidentally. This only affected performance, |
---|
| 37 | but in a quite bad way (a copy was needed). This has been fixed and |
---|
| 38 | byte-shuffling is not active when typesize == 1 anymore. |
---|
| 39 | |
---|
| 40 | |
---|
| 41 | Changes from 1.9.1 to 1.9.2 |
---|
| 42 | =========================== |
---|
| 43 | |
---|
| 44 | - Check whether Blosc is actually initialized before blosc_init(), |
---|
| 45 | blosc_destroy() and blosc_free_resources(). This makes the library |
---|
| 46 | more resistant to different initialization cycles |
---|
| 47 | (e.g. https://github.com/stevengj/Blosc.jl/issues/19). |
---|
| 48 | |
---|
| 49 | |
---|
| 50 | Changes from 1.9.0 to 1.9.1 |
---|
| 51 | =========================== |
---|
| 52 | |
---|
| 53 | - The internal copies when clevel=0 are made now via memcpy(). At the |
---|
| 54 | beginning of C-Blosc development, benchmarks where saying that the |
---|
| 55 | internal, multi-threaded copies inside C-Blosc were faster than |
---|
| 56 | memcpy(), but 6 years later, memcpy() made greats strides in terms |
---|
| 57 | of efficiency. With this, you should expect an slight speed |
---|
| 58 | advantage (10% ~ 20%) when C-Blosc is used as a replacement of |
---|
| 59 | memcpy() (which should not be the most common scenario out there). |
---|
| 60 | |
---|
| 61 | - Added a new DEACTIVATE_AVX2 cmake option to explicitly disable AVX2 |
---|
| 62 | at build-time. Thanks to James Bird. |
---|
| 63 | |
---|
| 64 | - The ``make -jN`` for parallel compilation should work now. Thanks |
---|
| 65 | to James Bird. |
---|
| 66 | |
---|
| 67 | |
---|
| 68 | Changes from 1.8.1 to 1.9.0 |
---|
| 69 | =========================== |
---|
| 70 | |
---|
| 71 | * New blosc_get_nthreads() function to get the number of threads that |
---|
| 72 | will be used internally during compression/decompression (set by |
---|
| 73 | already existing blosc_set_nthreads()). |
---|
| 74 | |
---|
| 75 | * New blosc_get_compressor() function to get the compressor that will |
---|
| 76 | be used internally during compression (set by already existing |
---|
| 77 | blosc_set_compressor()). |
---|
| 78 | |
---|
| 79 | * New blosc_get_blocksize() function to get the internal blocksize to |
---|
| 80 | be used during compression (set by already existing |
---|
| 81 | blosc_set_blocksize()). |
---|
| 82 | |
---|
| 83 | * Now, when the BLOSC_NOLOCK environment variable is set (to any |
---|
| 84 | value), the calls to blosc_compress() and blosc_decompress() will |
---|
| 85 | call blosc_compress_ctx() and blosc_decompress_ctx() under the hood |
---|
| 86 | so as to avoid the internal locks. See blosc.h for details. This |
---|
| 87 | allows multi-threaded apps calling the non _ctx() functions to avoid |
---|
| 88 | the internal locks in C-Blosc. For the not multi-threaded app |
---|
| 89 | though, it is in general slower to call the _ctx() functions so the |
---|
| 90 | use of BLOSC_NOLOCK is discouraged. |
---|
| 91 | |
---|
| 92 | * In the same vein, from now on, when the BLOSC_NTHREADS environment |
---|
| 93 | variable is set to an integer, every call to blosc_compress() and |
---|
| 94 | blosc_decompress() will call blosc_set_nthreads(BLOSC_NTHREADS) |
---|
| 95 | before the actuall compression/decompression process. See blosc.h |
---|
| 96 | for details. |
---|
| 97 | |
---|
| 98 | * Finally, if BLOSC_CLEVEL, BLOSC_SHUFFLE, BLOSC_TYPESIZE and/or |
---|
| 99 | BLOSC_COMPRESSOR variables are set in the environment, these will be |
---|
| 100 | also honored before calling blosc_compress(). |
---|
| 101 | |
---|
| 102 | * Calling blosc_init() before any other Blosc call, although |
---|
| 103 | recommended, is not necessary anymore. The idea is that you can use |
---|
| 104 | just the basic blosc_compress() and blosc_decompress() and control |
---|
| 105 | other parameters (nthreads, compressor, blocksize) by using |
---|
| 106 | environment variables (see above). |
---|
| 107 | |
---|
| 108 | |
---|
| 109 | Changes from 1.8.0 to 1.8.1 |
---|
| 110 | =========================== |
---|
| 111 | |
---|
| 112 | * Disable the use of __builtin_cpu_supports() for GCC 5.3.1 |
---|
| 113 | compatibility. Details in: |
---|
| 114 | https://lists.fedoraproject.org/archives/list/[email protected]/thread/ZM2L65WIZEEQHHLFERZYD5FAG7QY2OGB/ |
---|
| 115 | |
---|
| 116 | |
---|
| 117 | Changes from 1.7.1 to 1.8.0 |
---|
| 118 | =========================== |
---|
| 119 | |
---|
| 120 | * The code is (again) compatible with VS2008 and VS2010. This is |
---|
| 121 | important for compatibility with Python 2.6/2.7/3.3/3.4. |
---|
| 122 | |
---|
| 123 | * Introduced a new global lock during blosc_decompress() operation. |
---|
| 124 | As the blosc_compress() was already guarded by a global lock, this |
---|
| 125 | means that the compression/decompression is again thread safe. |
---|
| 126 | However, when using C-Blosc from multi-threaded environments, it is |
---|
| 127 | important to keep using the *_ctx() functions for performance |
---|
| 128 | reasons. NOTE: _ctx() functions will be replaced by more powerful |
---|
| 129 | ones in C-Blosc 2.0. |
---|
| 130 | |
---|
| 131 | |
---|
| 132 | Changes from 1.7.0 to 1.7.1 |
---|
| 133 | =========================== |
---|
| 134 | |
---|
| 135 | * Fixed a bug preventing bitshuffle to work correctly on getitem(). |
---|
| 136 | Now, everything with bitshuffle seems to work correctly. |
---|
| 137 | |
---|
| 138 | * Fixed the thread initialization for blosc_decompress_ctx(). Issue |
---|
| 139 | #158. Thanks to Chris Webers. |
---|
| 140 | |
---|
| 141 | * Fixed a bug in the blocksize computation introduced in 1.7.0. This |
---|
| 142 | could have been creating segfaults. |
---|
| 143 | |
---|
| 144 | * Allow bitshuffle to run on 1-byte typesizes. |
---|
| 145 | |
---|
| 146 | * New parametrization of the blocksize to be independent of the |
---|
| 147 | typesize. This allows a smoother speed throughout all typesizes. |
---|
| 148 | |
---|
| 149 | * lz4 and lz4hc codecs upgraded to 1.7.2 (from 1.7.0). |
---|
| 150 | |
---|
| 151 | * When calling set_nthreads() but not actually changing the number of |
---|
| 152 | threads in the internal pool does not teardown and setup it anymore. |
---|
| 153 | PR #153. Thanks to Santi Villalba. |
---|
| 154 | |
---|
| 155 | |
---|
| 156 | Changes from 1.6.1 to 1.7.0 |
---|
| 157 | =========================== |
---|
| 158 | |
---|
| 159 | * Added a new 'bitshuffle' filter so that the shuffle takes place at a |
---|
| 160 | bit level and not just at a byte one, which is what it does the |
---|
| 161 | previous 'shuffle' filter. |
---|
| 162 | |
---|
| 163 | For activating this new bit-level filter you only have to pass the |
---|
| 164 | symbol BLOSC_BITSHUFFLE to `blosc_compress()`. For the previous |
---|
| 165 | byte-level one, pass BLOSC_SHUFFLE. For disabling the shuffle, pass |
---|
| 166 | BLOSC_NOSHUFFLE. |
---|
| 167 | |
---|
| 168 | This is a port of the existing filter in |
---|
| 169 | https://github.com/kiyo-masui/bitshuffle. Thanks to Kiyo Masui for |
---|
| 170 | changing the license and allowing its inclusion here. |
---|
| 171 | |
---|
| 172 | * New acceleration mode for LZ4 and BloscLZ codecs that enters in |
---|
| 173 | operation with complevel < 9. This allows for an important boost in |
---|
| 174 | speed with minimal compression ratio loss. Francesc Alted. |
---|
| 175 | |
---|
| 176 | * LZ4 codec updated to 1.7.0 (r130). |
---|
| 177 | |
---|
| 178 | * PREFER_EXTERNAL_COMPLIBS cmake option has been removed and replaced |
---|
| 179 | by the more fine grained PREFER_EXTERNAL_LZ4, PREFER_EXTERNAL_SNAPPY |
---|
| 180 | and PREFER_EXTERNAL_ZLIB. In order to allow the use of the new API |
---|
| 181 | introduced in LZ4 1.7.0, PREFER_EXTERNAL_LZ4 has been set to OFF by |
---|
| 182 | default, whereas PREFER_EXTERNAL_SNAPPY and PREFER_EXTERNAL_ZLIB |
---|
| 183 | continues to be ON. |
---|
| 184 | |
---|
| 185 | * Implemented SSE2 shuffle support for buffers containing a number of |
---|
| 186 | elements which is not a multiple of (typesize * vectorsize). Jack |
---|
| 187 | Pappas. |
---|
| 188 | |
---|
| 189 | * Added SSE2 shuffle/unshuffle routines for types larger than 16 |
---|
| 190 | bytes. Jack Pappas. |
---|
| 191 | |
---|
| 192 | * 'test_basic' suite has been split in components for a much better |
---|
| 193 | granularity on what's a possibly failing test. Also, lots of new |
---|
| 194 | tests have been added. Jack Pappas. |
---|
| 195 | |
---|
| 196 | * Fixed compilation on non-Intel archs (tested on ARM). Zbyszek |
---|
| 197 | Szmek. |
---|
| 198 | |
---|
| 199 | * Modifyied cmake files in order to inform that AVX2 on Visual Studio |
---|
| 200 | is supported only in 2013 update 2 and higher. |
---|
| 201 | |
---|
| 202 | * Added a replacement for stdbool.h for Visual Studio < 2013. |
---|
| 203 | |
---|
| 204 | * blosclz codec adds Win64/Intel as a platform supporting unaligned |
---|
| 205 | addressing. That leads to a speed-up of 2.2x in decompression. |
---|
| 206 | |
---|
| 207 | * New blosc_get_version_string() function for retrieving the version |
---|
| 208 | of the c-blosc library. Useful when linking with dynamic libraries |
---|
| 209 | and one want to know its version. |
---|
| 210 | |
---|
| 211 | * New example (win-dynamic-linking.c) that shows how to link a Blosc |
---|
| 212 | DLL dynamically in run-time (Windows only). |
---|
| 213 | |
---|
| 214 | * The `context.threads_started` is initialized now when decompressing. |
---|
| 215 | This could cause crashes in case you decompressed before compressing |
---|
| 216 | (e.g. directly deserializing blosc buffers). @atchouprakov. |
---|
| 217 | |
---|
| 218 | * The HDF5 filter has been removed from c-blosc and moved into its own |
---|
| 219 | repo at: https://github.com/Blosc/hdf5 |
---|
| 220 | |
---|
| 221 | * The MS Visual Studio 2008 has been tested with c-blosc for ensuring |
---|
| 222 | compatibility with extensions for Python 2.6 and up. |
---|
| 223 | |
---|
| 224 | |
---|
| 225 | Changes from 1.6.0 to 1.6.1 |
---|
| 226 | =========================== |
---|
| 227 | |
---|
| 228 | * Support for *runtime* detection of AVX2 and SSE2 SIMD instructions. |
---|
| 229 | These changes make it possible to compile one single binary that |
---|
| 230 | runs on a system that supports SSE2 or AVX2 (or neither), so the |
---|
| 231 | redistribution problem is fixed (see #101). Thanks to Julian Taylor |
---|
| 232 | and Jack Pappas. |
---|
| 233 | |
---|
| 234 | * Added support for MinGW and TDM-GCC compilers for Windows. Thanks |
---|
| 235 | to yasushima-gd. |
---|
| 236 | |
---|
| 237 | * Fixed a bug in blosclz that could potentially overwrite an area |
---|
| 238 | beyond the output buffer. See #113. |
---|
| 239 | |
---|
| 240 | * New computation for blocksize so that larger typesizes (> 8 bytes) |
---|
| 241 | would benefit of much better compression ratios. Speed is not |
---|
| 242 | penalized too much. |
---|
| 243 | |
---|
| 244 | * New parametrization of the hash table for blosclz codec. This |
---|
| 245 | allows better compression in many scenarios, while slightly |
---|
| 246 | increasing the speed. |
---|
| 247 | |
---|
| 248 | |
---|
| 249 | Changes from 1.5.4 to 1.6.0 |
---|
| 250 | =========================== |
---|
| 251 | |
---|
| 252 | * Support for AVX2 is here! The benchmarks with a 4-core Intel |
---|
| 253 | Haswell machine tell that both compression and decompression are |
---|
| 254 | accelerated around a 10%, reaching peaks of 9.6 GB/s during |
---|
| 255 | compression and 26 GB/s during decompression (memcpy() speed for |
---|
| 256 | this machine is 7.5 GB/s for writes and 11.7 GB/s for reads). Many |
---|
| 257 | thanks to @littlezhou for this nice work. |
---|
| 258 | |
---|
| 259 | * Support for HPET (high precision timers) for the `bench` program. |
---|
| 260 | This is particularly important for microbenchmarks like bench is |
---|
| 261 | doing; since they take so little time to run, the granularity of a |
---|
| 262 | less-accurate timer may account for a significant portion of the |
---|
| 263 | runtime of the benchmark itself, skewing the results. Thanks to |
---|
| 264 | Jack Pappas. |
---|
| 265 | |
---|
| 266 | |
---|
| 267 | Changes from 1.5.3 to 1.5.4 |
---|
| 268 | =========================== |
---|
| 269 | |
---|
| 270 | * Updated to LZ4 1.6.0 (r128). |
---|
| 271 | |
---|
| 272 | * Fix resource leak in t_blosc. Jack Pappas. |
---|
| 273 | |
---|
| 274 | * Better checks during testing. Jack Pappas. |
---|
| 275 | |
---|
| 276 | * Dynamically loadable HDF5 filter plugin. Kiyo Masui. |
---|
| 277 | |
---|
| 278 | |
---|
| 279 | Changes from 1.5.2 to 1.5.3 |
---|
| 280 | =========================== |
---|
| 281 | |
---|
| 282 | * Use llabs function (where available) instead of abs to avoid |
---|
| 283 | truncating the result. Jack Pappas. |
---|
| 284 | |
---|
| 285 | * Use C11 aligned_alloc when it's available. Jack Pappas. |
---|
| 286 | |
---|
| 287 | * Use the built-in stdint.h with MSVC when available. Jack Pappas. |
---|
| 288 | |
---|
| 289 | * Only define the __SSE2__ symbol when compiling with MS Visual C++ |
---|
| 290 | and targeting x64 or x86 with the correct /arch flag set. This |
---|
| 291 | avoids re-defining the symbol which makes other compilers issue |
---|
| 292 | warnings. Jack Pappas. |
---|
| 293 | |
---|
| 294 | * Reinitializing Blosc during a call to set_nthreads() so as to fix |
---|
| 295 | problems with contexts. Francesc Alted. |
---|
| 296 | |
---|
| 297 | |
---|
| 298 | |
---|
| 299 | Changes from 1.5.1 to 1.5.2 |
---|
| 300 | =========================== |
---|
| 301 | |
---|
| 302 | * Using blosc_compress_ctx() / blosc_decompress_ctx() inside the HDF5 |
---|
| 303 | compressor for allowing operation in multiprocess scenarios. See: |
---|
| 304 | https://github.com/PyTables/PyTables/issues/412 |
---|
| 305 | |
---|
| 306 | The drawback of this quick fix is that the Blosc filter will be only |
---|
| 307 | able to use a single thread until another solution can be devised. |
---|
| 308 | |
---|
| 309 | |
---|
| 310 | Changes from 1.5.0 to 1.5.1 |
---|
| 311 | =========================== |
---|
| 312 | |
---|
| 313 | * Updated to LZ4 1.5.0. Closes #74. |
---|
| 314 | |
---|
| 315 | * Added the 'const' qualifier to non SSE2 shuffle functions. Closes #75. |
---|
| 316 | |
---|
| 317 | * Explicitly call blosc_init() in HDF5 blosc_filter.c, fixing a |
---|
| 318 | segfault. |
---|
| 319 | |
---|
| 320 | * Quite a few improvements in cmake files for HDF5 support. Thanks to |
---|
| 321 | Dana Robinson (The HDF Group). |
---|
| 322 | |
---|
| 323 | * Variable 'class' caused problems compiling the HDF5 filter with g++. |
---|
| 324 | Thanks to Laurent Chapon. |
---|
| 325 | |
---|
| 326 | * Small improvements on docstrings of c-blosc main functions. |
---|
| 327 | |
---|
| 328 | |
---|
| 329 | Changes from 1.4.1 to 1.5.0 |
---|
| 330 | =========================== |
---|
| 331 | |
---|
| 332 | * Added new calls for allowing Blosc to be used *simultaneously* |
---|
| 333 | (i.e. lock free) from multi-threaded environments. The new |
---|
| 334 | functions are: |
---|
| 335 | |
---|
| 336 | - blosc_compress_ctx(...) |
---|
| 337 | - blosc_decompress_ctx(...) |
---|
| 338 | |
---|
| 339 | See the new docstrings in blosc.h for how to use them. The previous |
---|
| 340 | API should be completely unaffected. Thanks to Christopher Speller. |
---|
| 341 | |
---|
| 342 | * Optimized copies during BloscLZ decompression. This can make BloscLZ |
---|
| 343 | to decompress up to 1.5x faster in some situations. |
---|
| 344 | |
---|
| 345 | * LZ4 and LZ4HC compressors updated to version 1.3.1. |
---|
| 346 | |
---|
| 347 | * Added an examples directory on how to link apps with Blosc. |
---|
| 348 | |
---|
| 349 | * stdlib.h moved from blosc.c to blosc.h as suggested by Rob Lathm. |
---|
| 350 | |
---|
| 351 | * Fix a warning for {snappy,lz4}-free compilation. Thanks to Andrew Schaaf. |
---|
| 352 | |
---|
| 353 | * Several improvements for CMakeLists.txt (cmake). |
---|
| 354 | |
---|
| 355 | * Fixing C99 compatibility warnings. Thanks to Christopher Speller. |
---|
| 356 | |
---|
| 357 | |
---|
| 358 | Changes from 1.4.0 to 1.4.1 |
---|
| 359 | =========================== |
---|
| 360 | |
---|
| 361 | * Fixed a bug in blosc_getitem() introduced in 1.4.0. Added a test for |
---|
| 362 | blosc_getitem() as well. |
---|
| 363 | |
---|
| 364 | |
---|
| 365 | Changes from 1.3.6 to 1.4.0 |
---|
| 366 | =========================== |
---|
| 367 | |
---|
| 368 | * Support for non-Intel and non-SSE2 architectures has been added. In |
---|
| 369 | particular, the Raspberry Pi platform (ARM) has been tested and all |
---|
| 370 | tests pass here. |
---|
| 371 | |
---|
| 372 | * Architectures requiring strict access alignment are supported as well. |
---|
| 373 | Due to this, arquitectures with a high penalty in accessing unaligned |
---|
| 374 | data (e.g. Raspberry Pi, ARMv6) can compress up to 2.5x faster. |
---|
| 375 | |
---|
| 376 | * LZ4 has been updated to r119 (1.2.0) so as to fix a possible security |
---|
| 377 | breach. |
---|
| 378 | |
---|
| 379 | |
---|
| 380 | Changes from 1.3.5 to 1.3.6 |
---|
| 381 | =========================== |
---|
| 382 | |
---|
| 383 | * Updated to LZ4 r118 due to a (highly unlikely) security hole. For |
---|
| 384 | details see: |
---|
| 385 | |
---|
| 386 | http://fastcompression.blogspot.fr/2014/06/debunking-lz4-20-years-old-bug-myth.html |
---|
| 387 | |
---|
| 388 | |
---|
| 389 | Changes from 1.3.4 to 1.3.5 |
---|
| 390 | =========================== |
---|
| 391 | |
---|
| 392 | * Removed a pointer from 'pointer from integer without a cast' compiler |
---|
| 393 | warning due to a bad macro definition. |
---|
| 394 | |
---|
| 395 | |
---|
| 396 | Changes from 1.3.3 to 1.3.4 |
---|
| 397 | =========================== |
---|
| 398 | |
---|
| 399 | * Fixed a false buffer overrun condition. This bug made c-blosc to |
---|
| 400 | fail, even if the failure was not real. |
---|
| 401 | |
---|
| 402 | * Fixed the type of a buffer string. |
---|
| 403 | |
---|
| 404 | |
---|
| 405 | Changes from 1.3.2 to 1.3.3 |
---|
| 406 | =========================== |
---|
| 407 | |
---|
| 408 | * Updated to LZ4 1.1.3 (improved speed for 32-bit platforms). |
---|
| 409 | |
---|
| 410 | * Added a new `blosc_cbuffer_complib()` for getting the compression |
---|
| 411 | library for a compressed buffer. |
---|
| 412 | |
---|
| 413 | |
---|
| 414 | Changes from 1.3.1 to 1.3.2 |
---|
| 415 | =========================== |
---|
| 416 | |
---|
| 417 | * Fix for compiling Snappy sources against MSVC 2008. Thanks to Mark |
---|
| 418 | Wiebe! |
---|
| 419 | |
---|
| 420 | * Version for internal LZ4 and Snappy are now supported. When compiled |
---|
| 421 | against the external libraries, this info is not available because |
---|
| 422 | they do not support the symbols (yet). |
---|
| 423 | |
---|
| 424 | |
---|
| 425 | Changes from 1.3.0 to 1.3.1 |
---|
| 426 | =========================== |
---|
| 427 | |
---|
| 428 | * Fixes for a series of issues with the filter for HDF5 and, in |
---|
| 429 | particular, a problem in the decompression buffer size that made it |
---|
| 430 | impossible to use the blosc_filter in combination with other ones |
---|
| 431 | (e.g. fletcher32). See |
---|
| 432 | https://github.com/PyTables/PyTables/issues/21. |
---|
| 433 | |
---|
| 434 | Thanks to Antonio Valentino for the fix! |
---|
| 435 | |
---|
| 436 | |
---|
| 437 | Changes from 1.2.4 to 1.3.0 |
---|
| 438 | =========================== |
---|
| 439 | |
---|
| 440 | A nice handful of compressors have been added to Blosc: |
---|
| 441 | |
---|
| 442 | * LZ4 (http://code.google.com/p/lz4/): A very fast |
---|
| 443 | compressor/decompressor. Could be thought as a replacement of the |
---|
| 444 | original BloscLZ, but it can behave better is some scenarios. |
---|
| 445 | |
---|
| 446 | * LZ4HC (http://code.google.com/p/lz4/): This is a variation of LZ4 |
---|
| 447 | that achieves much better compression ratio at the cost of being |
---|
| 448 | much slower for compressing. Decompression speed is unaffected (and |
---|
| 449 | sometimes better than when using LZ4 itself!), so this is very good |
---|
| 450 | for read-only datasets. |
---|
| 451 | |
---|
| 452 | * Snappy (http://code.google.com/p/snappy/): A very fast |
---|
| 453 | compressor/decompressor. Could be thought as a replacement of the |
---|
| 454 | original BloscLZ, but it can behave better is some scenarios. |
---|
| 455 | |
---|
| 456 | * Zlib (http://www.zlib.net/): This is a classic. It achieves very |
---|
| 457 | good compression ratios, at the cost of speed. However, |
---|
| 458 | decompression speed is still pretty good, so it is a good candidate |
---|
| 459 | for read-only datasets. |
---|
| 460 | |
---|
| 461 | With this, you can select the compression library with the new |
---|
| 462 | function:: |
---|
| 463 | |
---|
| 464 | int blosc_set_complib(char* complib); |
---|
| 465 | |
---|
| 466 | where you pass the library that you want to use (currently "blosclz", |
---|
| 467 | "lz4", "lz4hc", "snappy" and "zlib", but the list can grow in the |
---|
| 468 | future). |
---|
| 469 | |
---|
| 470 | You can get more info about compressors support in you Blosc build by |
---|
| 471 | using these functions:: |
---|
| 472 | |
---|
| 473 | char* blosc_list_compressors(void); |
---|
| 474 | int blosc_get_complib_info(char *compressor, char **complib, char **version); |
---|
| 475 | |
---|
| 476 | |
---|
[00587dc] | 477 | Changes from 1.2.2 to 1.2.3 |
---|
| 478 | =========================== |
---|
| 479 | |
---|
| 480 | - Added a `blosc_init()` and `blosc_destroy()` so that the global lock |
---|
| 481 | can be initialized safely. These new functions will also allow other |
---|
| 482 | kind of initializations/destructions in the future. |
---|
| 483 | |
---|
| 484 | Existing applications using Blosc do not need to start using the new |
---|
| 485 | functions right away, as long as they calling `blosc_set_nthreads()` |
---|
| 486 | previous to anything else. However, using them is highly recommended. |
---|
| 487 | |
---|
| 488 | Thanks to Oscar Villellas for the init/destroy suggestion, it is a |
---|
| 489 | nice idea! |
---|
| 490 | |
---|
| 491 | |
---|
| 492 | Changes from 1.2.1 to 1.2.2 |
---|
| 493 | =========================== |
---|
| 494 | |
---|
| 495 | - All important warnings removed for all tested platforms. This will |
---|
| 496 | allow less intrusiveness compilation experiences with applications |
---|
| 497 | including Blosc source code. |
---|
| 498 | |
---|
| 499 | - The `bench/bench.c` has been updated so that it can be compiled on |
---|
| 500 | Windows again. |
---|
| 501 | |
---|
| 502 | - The new web site has been set to: http://www.blosc.org |
---|
| 503 | |
---|
| 504 | |
---|
| 505 | Changes from 1.2 to 1.2.1 |
---|
| 506 | ========================= |
---|
| 507 | |
---|
| 508 | - Fixed a problem with global lock not being initialized. This |
---|
| 509 | affected mostly to Windows platforms. Thanks to Christoph |
---|
| 510 | Gohlke for finding the cure! |
---|
| 511 | |
---|
| 512 | |
---|
| 513 | Changes from 1.1.5 to 1.2 |
---|
| 514 | ========================= |
---|
| 515 | |
---|
| 516 | - Now it is possible to call Blosc simultaneously from a parent threaded |
---|
| 517 | application without problems. This has been solved by setting a |
---|
| 518 | global lock so that the different calling threads do not execute Blosc |
---|
| 519 | routines at the same time. Of course, real threading work is still |
---|
| 520 | available *inside* Blosc itself. Thanks to Thibault North. |
---|
| 521 | |
---|
| 522 | - Support for cmake is now included. Linux, Mac OSX and Windows |
---|
| 523 | platforms are supported. Thanks to Thibault North, Antonio Valentino |
---|
| 524 | and Mark Wiebe. |
---|
| 525 | |
---|
| 526 | - Fixed many compilers warnings (specially about unused variables). |
---|
| 527 | |
---|
| 528 | - As a consequence of the above, as minimal change in the API has been |
---|
| 529 | introduced. That is, the previous API:: |
---|
| 530 | |
---|
| 531 | void blosc_free_resources(void) |
---|
| 532 | |
---|
| 533 | has changed to:: |
---|
| 534 | |
---|
| 535 | int blosc_free_resources(void) |
---|
| 536 | |
---|
| 537 | Now, a return value of 0 means that the resources have been released |
---|
| 538 | successfully. If the return value is negative, then it is not |
---|
| 539 | guaranteed that all the resources have been freed. |
---|
| 540 | |
---|
| 541 | - Many typos were fixed and docs have been improved. The script for |
---|
| 542 | generating nice plots for the included benchmarks has been improved |
---|
| 543 | too. Thanks to Valetin Haenel. |
---|
| 544 | |
---|
| 545 | |
---|
| 546 | Changes from 1.1.4 to 1.1.5 |
---|
| 547 | =========================== |
---|
| 548 | |
---|
| 549 | - Fix compile error with msvc compilers (Christoph Gohlke) |
---|
| 550 | |
---|
| 551 | |
---|
| 552 | Changes from 1.1.3 to 1.1.4 |
---|
| 553 | =========================== |
---|
| 554 | |
---|
| 555 | - Redefinition of the BLOSC_MAX_BUFFERSIZE constant as (INT_MAX - |
---|
| 556 | BLOSC_MAX_OVERHEAD) instead of just INT_MAX. This prevents to produce |
---|
| 557 | outputs larger than INT_MAX, which is not supported. |
---|
| 558 | |
---|
| 559 | - `exit()` call has been replaced by a ``return -1`` in blosc_compress() |
---|
| 560 | when checking for buffer sizes. Now programs will not just exit when |
---|
| 561 | the buffer is too large, but return a negative code. |
---|
| 562 | |
---|
| 563 | - Improvements in explicit casts. Blosc compiles without warnings |
---|
| 564 | (with GCC) now. |
---|
| 565 | |
---|
| 566 | - Lots of improvements in docs, in particular a nice ascii-art diagram |
---|
| 567 | of the Blosc format (Valentin Haenel). |
---|
| 568 | |
---|
| 569 | - Improvements to the plot-speeds.py (Valentin Haenel). |
---|
| 570 | |
---|
| 571 | - [HDF5 filter] Adapted HDF5 filter to use HDF5 1.8 by default |
---|
| 572 | (Antonio Valentino). |
---|
| 573 | |
---|
| 574 | - [HDF5 filter] New version of H5Z_class_t definition (Antonio Valentino). |
---|
| 575 | |
---|
| 576 | |
---|
| 577 | Changes from 1.1.2 to 1.1.3 |
---|
| 578 | =========================== |
---|
| 579 | |
---|
| 580 | - Much improved compression ratio when using large blocks (> 64 KB) and |
---|
| 581 | high compression levels (> 6) under some circumstances (special data |
---|
| 582 | distribution). Closes #7. |
---|
| 583 | |
---|
| 584 | |
---|
| 585 | Changes from 1.1.1 to 1.1.2 |
---|
| 586 | =========================== |
---|
| 587 | |
---|
| 588 | - Fixes for small typesizes (#6 and #1 of python-blosc). |
---|
| 589 | |
---|
| 590 | |
---|
| 591 | Changes from 1.1 to 1.1.1 |
---|
| 592 | ========================= |
---|
| 593 | |
---|
| 594 | - Added code to avoid calling blosc_set_nthreads more than necessary. |
---|
| 595 | That will improve performance up to 3x or more, specially for small |
---|
| 596 | chunksizes (< 1 MB). |
---|
| 597 | |
---|
| 598 | |
---|
| 599 | Changes from 1.0 to 1.1 |
---|
| 600 | ======================= |
---|
| 601 | |
---|
| 602 | - Added code for emulating pthreads API on Windows. No need to link |
---|
| 603 | explicitly with pthreads lib on Windows anymore. However, performance |
---|
| 604 | is a somewhat worse because the new emulation layer does not support |
---|
| 605 | the `pthread_barrier_wait()` call natively. But the big improvement |
---|
| 606 | in installation easiness is worth this penalty (most specially on |
---|
| 607 | 64-bit Windows, where pthreads-win32 support is flaky). |
---|
| 608 | |
---|
| 609 | - New BLOSC_MAX_BUFFERSIZE, BLOSC_MAX_TYPESIZE and BLOSC_MAX_THREADS |
---|
| 610 | symbols are available in blosc.h. These can be useful for validating |
---|
| 611 | parameters in clients. Thanks to Robert Smallshire for suggesting |
---|
| 612 | that. |
---|
| 613 | |
---|
| 614 | - A new BLOSC_MIN_HEADER_LENGTH symbol in blosc.h tells how many bytes |
---|
| 615 | long is the minimum length of a Blosc header. `blosc_cbuffer_sizes()` |
---|
| 616 | only needs these bytes to be passed to work correctly. |
---|
| 617 | |
---|
| 618 | - Removed many warnings (related with potentially dangerous type-casting |
---|
| 619 | code) issued by MSVC 2008 in 64-bit mode. |
---|
| 620 | |
---|
| 621 | - Fixed a problem with the computation of the blocksize in the Blosc |
---|
| 622 | filter for HDF5. |
---|
| 623 | |
---|
| 624 | - Fixed a problem with large datatypes. See |
---|
| 625 | http://www.pytables.org/trac/ticket/288 for more info. |
---|
| 626 | |
---|
| 627 | - Now Blosc is able to work well even if you fork an existing process |
---|
| 628 | with a pool of threads. Bug discovered when PyTables runs in |
---|
| 629 | multiprocess environments. See http://pytables.org/trac/ticket/295 |
---|
| 630 | for details. |
---|
| 631 | |
---|
| 632 | - Added a new `blosc_getitem()` call to allow the retrieval of items in |
---|
| 633 | sizes smaller than the complete buffer. That is useful for the carray |
---|
| 634 | project, but certainly for others too. |
---|
| 635 | |
---|
| 636 | |
---|
| 637 | Changes from 0.9.5 to 1.0 |
---|
| 638 | ========================= |
---|
| 639 | |
---|
| 640 | - Added a filter for HDF5 so that people can use Blosc outside PyTables, |
---|
| 641 | if they want to. |
---|
| 642 | |
---|
| 643 | - Many small improvements, specially in README files. |
---|
| 644 | |
---|
| 645 | - Do not assume that size_t is uint_32 for every platform. |
---|
| 646 | |
---|
| 647 | - Added more protection for large buffers or in allocation memory |
---|
| 648 | routines. |
---|
| 649 | |
---|
| 650 | - The src/ directory has been renamed to blosc/. |
---|
| 651 | |
---|
| 652 | - The `maxbytes` parameter in `blosc_compress()` has been renamed to |
---|
| 653 | `destsize`. This is for consistency with the `blosc_decompress()` |
---|
| 654 | parameters. |
---|
| 655 | |
---|
| 656 | |
---|
| 657 | Changes from 0.9.4 to 0.9.5 |
---|
| 658 | =========================== |
---|
| 659 | |
---|
| 660 | - Now, compression level 0 is allowed, meaning not compression at all. |
---|
| 661 | The overhead of this mode will be always BLOSC_MAX_OVERHEAD (16) |
---|
| 662 | bytes. This mode actually represents using Blosc as a basic memory |
---|
| 663 | container. |
---|
| 664 | |
---|
| 665 | - Supported a new parameter `maxbytes` for ``blosc_compress()``. It |
---|
| 666 | represents a maximum of bytes for output. Tests unit added too. |
---|
| 667 | |
---|
| 668 | - Added 3 new functions for querying different metadata on compressed |
---|
| 669 | buffers. A test suite for testing the new API has been added too. |
---|
| 670 | |
---|
| 671 | |
---|
| 672 | Changes from 0.9.3 to 0.9.4 |
---|
| 673 | =========================== |
---|
| 674 | |
---|
| 675 | - Support for cross-platform big/little endian compatibility in Blosc |
---|
| 676 | headers has been added. |
---|
| 677 | |
---|
| 678 | - Fixed several failures exposed by the extremesuite. The problem was a |
---|
| 679 | bad check for limits in the buffer size while compressing. |
---|
| 680 | |
---|
| 681 | - Added a new suite in bench.c called ``debugsuite`` that is |
---|
| 682 | appropriate for debugging purposes. Now, the ``extremesuite`` can be |
---|
| 683 | used for running the complete (and extremely long) suite. |
---|
| 684 | |
---|
| 685 | |
---|
| 686 | Changes from 0.9.0 to 0.9.3 |
---|
| 687 | =========================== |
---|
| 688 | |
---|
| 689 | - Fixed several nasty bugs uncovered by the new suites in bench.c. |
---|
| 690 | Thanks to Tony Theodore and Gabriel Beckers for their (very) |
---|
| 691 | responsive beta testing and feedback. |
---|
| 692 | |
---|
| 693 | - Added several modes (suites), namely ``suite``, ``hardsuite`` and |
---|
| 694 | ``extremehardsuite`` in bench.c so as to allow different levels of |
---|
| 695 | testing. |
---|
| 696 | |
---|
| 697 | |
---|
| 698 | Changes from 0.8.0 to 0.9 |
---|
| 699 | ========================= |
---|
| 700 | |
---|
| 701 | - Internal format version bumped to 2 in order to allow an easy way to |
---|
| 702 | indicate that a buffer is being saved uncompressed. This is not |
---|
| 703 | supported yet, but it might be in the future. |
---|
| 704 | |
---|
| 705 | - Blosc can use threads now for leveraging the increasing number of |
---|
| 706 | multi-core processors out there. See README-threaded.txt for more |
---|
| 707 | info. |
---|
| 708 | |
---|
| 709 | - Added a protection for MacOSX so that it has to not link against |
---|
| 710 | posix_memalign() funtion, which seems not available in old versions of |
---|
| 711 | MacOSX (for example, Tiger). At nay rate, posix_memalign() is not |
---|
| 712 | necessary on Mac because 16 bytes alignment is ensured by default. |
---|
| 713 | Thanks to Ivan Vilata. Fixes #3. |
---|