123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117 |
- /*
- Example program demonstrating use of the Blosc filter from C code.
- To compile this program:
- $ gcc many_compressors.c -o many_compressors -lblosc -lpthread
- or, if you don't have the blosc library installed:
- $ gcc -O3 -msse2 many_compressors.c ../blosc/*.c -I../blosc \
- -o many_compressors -lpthread \
- -DHAVE_ZLIB -lz -DHAVE_LZ4 -llz4 -DHAVE_SNAPPY -lsnappy
- Using MSVC on Windows:
- $ cl /Ox /Femany_compressors.exe /Iblosc many_compressors.c blosc\*.c
- To run:
- $ ./many_compressors
- Blosc version info: 1.10.0.dev ($Date:: 2016-07-20 #$)
- Using 4 threads (previously using 1)
- Using blosclz compressor
- Compression: 4000000 -> 158788 (25.2x)
- Succesful roundtrip!
- Using lz4 compressor
- Compression: 4000000 -> 235419 (17.0x)
- Succesful roundtrip!
- Using lz4hc compressor
- Compression: 4000000 -> 38314 (104.4x)
- Succesful roundtrip!
- Using snappy compressor
- Compression: 4000000 -> 311617 (12.8x)
- Succesful roundtrip!
- Using zlib compressor
- Compression: 4000000 -> 22103 (181.0x)
- Succesful roundtrip!
- Using zstd compressor
- Compression: 4000000 -> 11813 (338.6x)
- Succesful roundtrip!
- */
- #include <stdio.h>
- #include <blosc.h>
- #define SIZE 100*100*100
- #define SHAPE {100,100,100}
- #define CHUNKSHAPE {1,100,100}
- int main(){
- static float data[SIZE];
- static float data_out[SIZE];
- static float data_dest[SIZE];
- int isize = SIZE*sizeof(float), osize = SIZE*sizeof(float);
- int dsize = SIZE*sizeof(float), csize;
- int nthreads, pnthreads, i;
- char* compressors[] = {"blosclz", "lz4", "lz4hc", "snappy", "zlib", "zstd"};
- int ccode, rcode;
- for(i=0; i<SIZE; i++){
- data[i] = i;
- }
- /* Register the filter with the library */
- printf("Blosc version info: %s (%s)\n",
- BLOSC_VERSION_STRING, BLOSC_VERSION_DATE);
- /* Initialize the Blosc compressor */
- blosc_init();
- nthreads = 4;
- pnthreads = blosc_set_nthreads(nthreads);
- printf("Using %d threads (previously using %d)\n", nthreads, pnthreads);
- /* Tell Blosc to use some number of threads */
- for (ccode=0; ccode <= 5; ccode++) {
- rcode = blosc_set_compressor(compressors[ccode]);
- if (rcode < 0) {
- printf("Error setting %s compressor. It really exists?",
- compressors[ccode]);
- return rcode;
- }
- printf("Using %s compressor\n", compressors[ccode]);
- /* Compress with clevel=5 and shuffle active */
- csize = blosc_compress(5, 1, sizeof(float), isize, data, data_out, osize);
- if (csize < 0) {
- printf("Compression error. Error code: %d\n", csize);
- return csize;
- }
- printf("Compression: %d -> %d (%.1fx)\n", isize, csize, (1.*isize) / csize);
- /* Decompress */
- dsize = blosc_decompress(data_out, data_dest, dsize);
- if (dsize < 0) {
- printf("Decompression error. Error code: %d\n", dsize);
- return dsize;
- }
- /* After using it, destroy the Blosc environment */
- blosc_destroy();
- for(i=0;i<SIZE;i++){
- if(data[i] != data_dest[i]) {
- printf("Decompressed data differs from original!\n");
- return -1;
- }
- }
- printf("Succesful roundtrip!\n");
- }
- return 0;
- }
|