Skip to content

Commit

Permalink
Add bsc 3.2.4
Browse files Browse the repository at this point in the history
  • Loading branch information
stefanrua committed Aug 18, 2022
1 parent 609d783 commit 69f9448
Show file tree
Hide file tree
Showing 42 changed files with 21,366 additions and 6 deletions.
27 changes: 25 additions & 2 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -308,6 +308,25 @@ ifneq "$(DONT_BUILD_NVCOMP)" "1"
NVCOMP_CU_OBJ = $(NVCOMP_CU_SRC:%=%.o)
NVCOMP_FILES = $(NVCOMP_CU_OBJ) $(NVCOMP_CPP_OBJ)
endif
ifeq "$(DONT_BUILD_BSC)" "1"
DEFINES += -DBENCH_HAS_BSC
else
CFLAGS += -DLIBBSC_CUDA_SUPPORT
CFLAGS += -DLIBBSC_SORT_TRANSFORM_SUPPORT
BSC_FILES = libbsc/libbsc/adler32/adler32.o
BSC_FILES += libbsc/libbsc/bwt/libsais/libsais.o
BSC_FILES += libbsc/libbsc/bwt/bwt.o
BSC_FILES += libbsc/libbsc/coder/coder.o
BSC_FILES += libbsc/libbsc/coder/qlfc/qlfc.o
BSC_FILES += libbsc/libbsc/coder/qlfc/qlfc_model.o
BSC_FILES += libbsc/libbsc/filters/detectors.o
BSC_FILES += libbsc/libbsc/filters/preprocessing.o
BSC_FILES += libbsc/libbsc/libbsc/libbsc.o
BSC_FILES += libbsc/libbsc/lzp/lzp.o
BSC_FILES += libbsc/libbsc/platform/platform.o
BSC_FILES += libbsc/libbsc/st/st.o
BSC_FILES += libbsc/libbsc/st/st_cu.o
endif
endif

all: lzbench
Expand Down Expand Up @@ -347,13 +366,17 @@ $(NVCOMP_CPP_OBJ): %.cpp.o: %.cpp
@$(MKDIR) $(dir $@)
$(CXX) $(CFLAGS) -c $< -o $@

libbsc/libbsc/st/st_cu.o: libbsc/libbsc/st/st.cu
@$(MKDIR) $(dir $@)
$(CUDA_CC) $(CUDA_CFLAGS) $(CFLAGS) -c $< -o $@

# disable the implicit rule for making a binary out of a single object file
%: %.o


_lzbench/lzbench.o: _lzbench/lzbench.cpp _lzbench/lzbench.h

lzbench: $(BZIP2_FILES) $(DENSITY_FILES) $(FASTLZMA2_OBJ) $(ZSTD_FILES) $(GLZA_FILES) $(LZSSE_FILES) $(LZFSE_FILES) $(XPACK_FILES) $(GIPFELI_FILES) $(XZ_FILES) $(LIBLZG_FILES) $(BRIEFLZ_FILES) $(LZF_FILES) $(LZRW_FILES) $(BROTLI_FILES) $(CSC_FILES) $(LZMA_FILES) $(ZLING_FILES) $(QUICKLZ_FILES) $(SNAPPY_FILES) $(ZLIB_FILES) $(LZHAM_FILES) $(LZO_FILES) $(UCL_FILES) $(LZMAT_FILES) $(LZ4_FILES) $(LIBDEFLATE_FILES) $(MISC_FILES) $(NVCOMP_FILES) $(LZBENCH_FILES)
lzbench: $(BSC_FILES) $(BZIP2_FILES) $(DENSITY_FILES) $(FASTLZMA2_OBJ) $(ZSTD_FILES) $(GLZA_FILES) $(LZSSE_FILES) $(LZFSE_FILES) $(XPACK_FILES) $(GIPFELI_FILES) $(XZ_FILES) $(LIBLZG_FILES) $(BRIEFLZ_FILES) $(LZF_FILES) $(LZRW_FILES) $(BROTLI_FILES) $(CSC_FILES) $(LZMA_FILES) $(ZLING_FILES) $(QUICKLZ_FILES) $(SNAPPY_FILES) $(ZLIB_FILES) $(LZHAM_FILES) $(LZO_FILES) $(UCL_FILES) $(LZMAT_FILES) $(LZ4_FILES) $(LIBDEFLATE_FILES) $(MISC_FILES) $(NVCOMP_FILES) $(LZBENCH_FILES)
$(CXX) $^ -o $@ $(LDFLAGS)
@echo Linked GCC_VERSION=$(GCC_VERSION) CLANG_VERSION=$(CLANG_VERSION) COMPILER=$(COMPILER)

Expand All @@ -370,4 +393,4 @@ lzbench: $(BZIP2_FILES) $(DENSITY_FILES) $(FASTLZMA2_OBJ) $(ZSTD_FILES) $(GLZA_F
$(CXX) $(CFLAGS) $< -c -o $@

clean:
rm -rf lzbench lzbench.exe *.o _lzbench/*.o bzip2/*.o fast-lzma2/*.o slz/*.o zstd/lib/*.o zstd/lib/*.a zstd/lib/common/*.o zstd/lib/compress/*.o zstd/lib/decompress/*.o zstd/lib/dictBuilder/*.o lzsse/lzsse2/*.o lzsse/lzsse4/*.o lzsse/lzsse8/*.o lzfse/*.o xpack/lib/*.o blosclz/*.o gipfeli/*.o xz/*.o xz/common/*.o xz/check/*.o xz/lzma/*.o xz/lz/*.o xz/rangecoder/*.o liblzg/*.o lzlib/*.o brieflz/*.o brotli/common/*.o brotli/enc/*.o brotli/dec/*.o libcsc/*.o wflz/*.o lzjb/*.o lzma/*.o density/buffers/*.o density/algorithms/*.o density/algorithms/cheetah/core/*.o density/algorithms/*.o density/algorithms/lion/forms/*.o density/algorithms/lion/core/*.o density/algorithms/chameleon/core/*.o density/*.o density/structure/*.o pithy/*.o glza/*.o libzling/*.o yappy/*.o shrinker/*.o fastlz/*.o ucl/*.o zlib/*.o lzham/*.o lzmat/*.o lizard/*.o lz4/*.o crush/*.o lzf/*.o lzrw/*.o lzo/*.o snappy/*.o quicklz/*.o tornado/*.o libdeflate/lib/*.o libdeflate/lib/x86/*.o libdeflate/lib/arm/*.o nakamichi/*.o nvcomp/*.o
rm -rf lzbench lzbench.exe *.o _lzbench/*.o bzip2/*.o libbsc/libbsc/adler32/*.o libbsc/libbsc/bwt/libsais/*.o libbsc/libbsc/bwt/*.o libbsc/libbsc/coder/*.o libbsc/libbsc/coder/qlfc/*.o libbsc/libbsc/filters/*.o libbsc/libbsc/libbsc/*.o libbsc/libbsc/lzp/*.o libbsc/libbsc/platform/*.o libbsc/libbsc/st/*.o fast-lzma2/*.o slz/*.o zstd/lib/*.o zstd/lib/*.a zstd/lib/common/*.o zstd/lib/compress/*.o zstd/lib/decompress/*.o zstd/lib/dictBuilder/*.o lzsse/lzsse2/*.o lzsse/lzsse4/*.o lzsse/lzsse8/*.o lzfse/*.o xpack/lib/*.o blosclz/*.o gipfeli/*.o xz/*.o xz/common/*.o xz/check/*.o xz/lzma/*.o xz/lz/*.o xz/rangecoder/*.o liblzg/*.o lzlib/*.o brieflz/*.o brotli/common/*.o brotli/enc/*.o brotli/dec/*.o libcsc/*.o wflz/*.o lzjb/*.o lzma/*.o density/buffers/*.o density/algorithms/*.o density/algorithms/cheetah/core/*.o density/algorithms/*.o density/algorithms/lion/forms/*.o density/algorithms/lion/core/*.o density/algorithms/chameleon/core/*.o density/*.o density/structure/*.o pithy/*.o glza/*.o libzling/*.o yappy/*.o shrinker/*.o fastlz/*.o ucl/*.o zlib/*.o lzham/*.o lzmat/*.o lizard/*.o lz4/*.o crush/*.o lzf/*.o lzrw/*.o lzo/*.o snappy/*.o quicklz/*.o tornado/*.o libdeflate/lib/*.o libdeflate/lib/x86/*.o libdeflate/lib/arm/*.o nakamichi/*.o nvcomp/*.o
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -83,6 +83,7 @@ see the [CompFuzz Results](https://github.com/nemequ/compfuzz/wiki/Results) page
- [blosclz 2.0.0](https://github.com/Blosc/c-blosc2)
- [brieflz 1.3.0](https://github.com/jibsen/brieflz)
- [brotli 1.0.9](https://github.com/google/brotli)
- [bsc 3.2.4](https://github.com/IlyaGrebnov/libbsc)
- [bzip2 1.0.8](http://www.bzip.org/downloads.html)
- [crush 1.0](https://sourceforge.net/projects/crush/)
- [csc 2016-10-13](https://github.com/fusiyuan2010/CSC) - WARNING: it can throw SEGFAULT compiled with Apple LLVM version 7.3.0 (clang-703.0.31)
Expand Down
67 changes: 67 additions & 0 deletions _lzbench/compressors.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -92,6 +92,73 @@ int64_t lzbench_brotli_decompress(char *inbuf, size_t insize, char *outbuf, size



#ifdef BENCH_HAS_BSC
#include "libbsc/libbsc/libbsc.h"

char *lzbench_bsc_init(size_t insize, size_t level, size_t)
{
int features = LIBBSC_FEATURE_FASTMODE | LIBBSC_FEATURE_MULTITHREADING;
bsc_init(features);
return 0;
}

int64_t lzbench_bsc_compress(char *inbuf, size_t insize, char *outbuf, size_t outsize, size_t level, size_t, char*)
{
int features = LIBBSC_FEATURE_FASTMODE | LIBBSC_FEATURE_MULTITHREADING;
int lzpHashSize = 15; // -H
int lzpMinLen = 128; // -M
int blockSorter = level == 2 ? 1 : (int)level; // -m, note: 2 doesn't exist, default to 1
int coder = 1; // -e

int res = bsc_compress((unsigned char *)inbuf, (unsigned char *)outbuf, (int)insize, lzpHashSize, lzpMinLen, blockSorter, coder, features);
return res;
}

int64_t lzbench_bsc_decompress(char *inbuf, size_t insize, char *outbuf, size_t outsize, size_t level, size_t, char*)
{
int features = LIBBSC_FEATURE_FASTMODE | LIBBSC_FEATURE_MULTITHREADING;
int insize_bsc;
int outsize_bsc;

bsc_block_info((unsigned char *)inbuf, LIBBSC_HEADER_SIZE, &insize_bsc, &outsize_bsc, features);
bsc_decompress((unsigned char *)inbuf, insize_bsc, (unsigned char *)outbuf, outsize_bsc, features);
return outsize;
}

char *lzbench_bsc_cuda_init(size_t insize, size_t level, size_t)
{
int features = LIBBSC_FEATURE_FASTMODE | LIBBSC_FEATURE_MULTITHREADING | LIBBSC_FEATURE_CUDA;
bsc_init(features);
return 0;
}

int64_t lzbench_bsc_cuda_compress(char *inbuf, size_t insize, char *outbuf, size_t outsize, size_t level, size_t, char*)
{
int features = LIBBSC_FEATURE_FASTMODE | LIBBSC_FEATURE_MULTITHREADING | LIBBSC_FEATURE_CUDA;
int lzpHashSize = 15;
int lzpMinLen = 128;
int blockSorter = (int)level;
int coder = 1;

int res = bsc_compress((unsigned char *)inbuf, (unsigned char *)outbuf, (int)insize, lzpHashSize, lzpMinLen, blockSorter, coder, features);
return res;
}

int64_t lzbench_bsc_cuda_decompress(char *inbuf, size_t insize, char *outbuf, size_t outsize, size_t level, size_t, char*)
{
int features = LIBBSC_FEATURE_FASTMODE | LIBBSC_FEATURE_MULTITHREADING | LIBBSC_FEATURE_CUDA;
int insize_bsc;
int outsize_bsc;

bsc_block_info((unsigned char *)inbuf, LIBBSC_HEADER_SIZE, &insize_bsc, &outsize_bsc, features);
bsc_decompress((unsigned char *)inbuf, insize_bsc, (unsigned char *)outbuf, outsize_bsc, features);
return outsize;
}

#endif // BENCH_HAS_BSC



#ifndef BENCH_REMOVE_BZIP2
#include "bzip2/bzlib.h"

Expand Down
17 changes: 17 additions & 0 deletions _lzbench/compressors.h
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,23 @@ int64_t lzbench_return_0(char *inbuf, size_t insize, char *outbuf, size_t outsiz
#endif


#ifdef BENCH_HAS_BSC
char* lzbench_bsc_init(size_t insize, size_t level, size_t);
int64_t lzbench_bsc_compress(char *inbuf, size_t insize, char *outbuf, size_t outsize, size_t level, size_t, char*);
int64_t lzbench_bsc_decompress(char *inbuf, size_t insize, char *outbuf, size_t outsize, size_t, size_t, char*);
char* lzbench_bsc_cuda_init(size_t insize, size_t level, size_t);
int64_t lzbench_bsc_cuda_compress(char *inbuf, size_t insize, char *outbuf, size_t outsize, size_t level, size_t, char*);
int64_t lzbench_bsc_cuda_decompress(char *inbuf, size_t insize, char *outbuf, size_t outsize, size_t, size_t, char*);
#else
#define lzbench_bsc_init NULL
#define lzbench_bsc_compress NULL
#define lzbench_bsc_decompress NULL
#define lzbench_bsc_cuda init NULL
#define lzbench_bsc_cuda_compress NULL
#define lzbench_bsc_cuda_decompress NULL
#endif // BENCH_HAS_BSC


#ifndef BENCH_REMOVE_BZIP2
int64_t lzbench_bzip2_compress(char *inbuf, size_t insize, char *outbuf, size_t outsize, size_t level, size_t, char*);
int64_t lzbench_bzip2_decompress(char *inbuf, size_t insize, char *outbuf, size_t outsize, size_t, size_t, char*);
Expand Down
10 changes: 6 additions & 4 deletions _lzbench/lzbench.h
Original file line number Diff line number Diff line change
Expand Up @@ -137,7 +137,7 @@ typedef struct



#define LZBENCH_COMPRESSOR_COUNT 73
#define LZBENCH_COMPRESSOR_COUNT 75

static const compressor_desc_t comp_desc[LZBENCH_COMPRESSOR_COUNT] =
{
Expand All @@ -147,6 +147,8 @@ static const compressor_desc_t comp_desc[LZBENCH_COMPRESSOR_COUNT] =
{ "brotli", "1.0.9", 0, 11, 0, 0, lzbench_brotli_compress, lzbench_brotli_decompress, NULL, NULL },
{ "brotli22", "1.0.9", 0, 11, 22, 0, lzbench_brotli_compress, lzbench_brotli_decompress, NULL, NULL },
{ "brotli24", "1.0.9", 0, 11, 24, 0, lzbench_brotli_compress, lzbench_brotli_decompress, NULL, NULL },
{ "bsc", "3.2.4", 1, 6, 0, 0, lzbench_bsc_compress, lzbench_bsc_decompress, lzbench_bsc_init, NULL },
{ "bsc_cuda", "3.2.4", 5, 8, 0, 0, lzbench_bsc_cuda_compress, lzbench_bsc_cuda_decompress, lzbench_bsc_cuda_init, NULL },
{ "bzip2", "1.0.8", 1, 9, 0, 0, lzbench_bzip2_compress, lzbench_bzip2_decompress, NULL, NULL },
{ "crush", "1.0", 0, 2, 0, 0, lzbench_crush_compress, lzbench_crush_decompress, NULL, NULL },
{ "csc", "2016-10-13", 1, 5, 0, 0, lzbench_csc_compress, lzbench_csc_decompress, NULL, NULL },
Expand Down Expand Up @@ -225,14 +227,14 @@ static const alias_desc_t alias_desc[LZBENCH_ALIASES_COUNT] =
{ "fast", "density/fastlz/lizard,10,11,12,13,14/lz4/lz4fast,3,17/lzf/lzfse/lzjb/lzo1b,1/lzo1c,1/lzo1f,1/lzo1x,1/lzo1y,1/" \
"lzrw,1,3,4,5/lzsse4fast/lzsse8fast/lzvn/pithy,0,3,6,9/quicklz,1,2/shrinker/snappy/tornado,1,2,3/zstd,1,2,3,4,5" }, // default alias
#if !defined(__arm__) && !defined(__aarch64__)
{ "all", "blosclz,1,3,6,9/brieflz,1,3,6,8/brotli,0,2,5,8,11/bzip2,1,5,9/" \
{ "all", "blosclz,1,3,6,9/brieflz,1,3,6,8/brotli,0,2,5,8,11/bsc,1,3,6/bsc_cuda,5,7,8/bzip2,1,5,9/" \
"crush,0,1,2/csc,1,3,5/density,1,2,3/fastlz,1,2/fastlzma2,1,3,5,8,10/gipfeli/libdeflate,1,3,6,9,12/lizard,10,12,15,19,20,22,25,29,30,32,35,39,40,42,45,49/lz4/lz4fast,3,17/lz4hc,1,4,9,12/" \
"lzf,0,1/lzfse/lzg,1,4,6,8/lzham,0,1/lzjb/lzlib,0,3,6,9/lzma,0,2,4,5,9/lzo1/lzo1a/lzo1b,1,3,6,9,99,999/lzo1c,1,3,6,9,99,999/lzo1f/lzo1x/lzo1y/lzo1z/lzo2a/" \
"lzrw,1,3,4,5/lzsse2,1,6,12,16/lzsse4,1,6,12,16/lzsse8,1,6,12,16/lzvn/pithy,0,3,6,9/quicklz,1,2,3/slz_gzip/snappy/tornado,1,2,3,4,5,6,7,10,13,16/" \
"ucl_nrv2b,1,6,9/ucl_nrv2d,1,6,9/ucl_nrv2e,1,6,9/xpack,1,6,9/xz,0,3,6,9/yalz77,1,4,8,12/yappy,1,10,100/zlib,1,6,9/zling,0,1,2,3,4/zstd,1,2,5,8,11,15,18,22/" \
"shrinker/wflz/lzmat" }, // these can SEGFAULT
#else
{ "all", "blosclz,1,3,6,9/brieflz,1,3,6,8/brotli,0,2,5,8/bzip2,1,5,9/" \
{ "all", "blosclz,1,3,6,9/brieflz,1,3,6,8/brotli,0,2,5,8/bsc,1,3,6/bsc_cuda,5,7,8/bzip2,1,5,9/" \
"crush,0,1,2/csc,1,3,5/density,1,2,3/fastlz,1,2/gipfeli/libdeflate,1,3,6,9,12/lizard,10,12,15,20,22,25,30,32,35,40,42,45/lz4/lz4fast,3,17/lz4hc,1,4,9/" \
"lzf,0,1/lzfse/lzg,1,4,6,8/lzham,0,1/lzjb/lzlib,0,3,6,9/lzma,0,2,4,5/lzo1/lzo1a/lzo1b,1,3,6,9,99,999/lzo1c,1,3,6,9,99,999/lzo1f/lzo1x/lzo1y/lzo1z/lzo2a/" \
"lzrw,1,3,4,5/lzsse2,1,6,12,16/lzsse4,1,6,12,16/lzsse8,1,6,12,16/lzvn/pithy,0,3,6,9/quicklz,1,2,3/slz_gzip/snappy/tornado,1,2,3,4,5,6,7,10,13,16/" \
Expand All @@ -250,7 +252,7 @@ static const alias_desc_t alias_desc[LZBENCH_ALIASES_COUNT] =
{ "lzo1y", "lzo1y,1,999" },
{ "lzo", "lzo1/lzo1a/lzo1b/lzo1c/lzo1f/lzo1x/lzo1y/lzo1z/lzo2a" },
{ "ucl", "ucl_nrv2b/ucl_nrv2d/ucl_nrv2e" },
{ "cuda", "cudaMemcpy/nvcomp_lz4,0,1,3,5" },
{ "cuda", "cudaMemcpy/nvcomp_lz4,0,1,3,5/bsc_cuda,5,6,7,8" },
};

#endif
15 changes: 15 additions & 0 deletions libbsc/AUTHORS
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
-- Authors of bsc and libbsc

Ilya Grebnov <[email protected]>

-- This program is based on (at least) the work of

Yuta Mori, Charles Bloom, Julian Seward, Mike Burrows, Matt Mahoney,
David Wheeler, Sebastian Deorowicz, Florin Ghido, Peter Fenwick,
Michael Schindler, Bulat Ziganshin, Eugene Shelwien, Yann Collet,
Dmitry Shkarin, Mark Adler, Przemyslaw Skibinski, Duane Merrill,
Michael Maniscalco, Jarek Duda, Fabian Giesen, Pascal Massimino,
James K. Bonfield, Nania Francesco.



113 changes: 113 additions & 0 deletions libbsc/CHANGES
Original file line number Diff line number Diff line change
@@ -0,0 +1,113 @@
Changes in 3.2.4 (18 January, 18 2022)
- Improved performance for AArch64 (ARM64) platform.

Changes in 3.2.3 (September, 30 2021)
- Fixed various out-of-bound memory access bugs found by LibFuzzer.
- Fixed data corruption issue found by LibFuzzer.
- Due to these fixes, an upgrade to this version is strongly recommended.

Changes in 3.2.2 (September, 18 2021)
- Improved performance of LZP algorithm.

Changes in 3.2.1 (September, 17 2021)
- Improved performance of LZP algorithm.

Changes in 3.2.0 (September, 10 2021)
- New BWT / ST post-coder for fast compression and decompression.

Changes in 3.1.9 (August, 25 2021)
- Updated makefile to use Clang compiler and AVX2 instruction set for maximum performance.
- Slightly improved compression and decompression performance.

Changes in 3.1.8 (August, 18 2021)
- Slightly improved compression performance.

Changes in 3.1.7 (August, 15 2021)
- Slightly improved compression performance.

Changes in 3.1.6 (August, 12 2021)
- Slightly improved decompression performance.

Changes in 3.1.5 (August, 10 2021)
- Improved Adler-32 performance with SIMD (SSSE3).
- Improved reverse MTF performance with SIMD (SSE4.1).

Changes in 3.1.4 (August, 4 2021)
- Implemented dynamic CPU Dispatching to SSE2, AVX and AVX2.
- Further improved forward MTF performance.

Changes in 3.1.3 (July, 14 2021)
- Maximum compression block size increased to 2047 megabytes
- Improved forward MTF performance with SIMD (SSE2)

Changes in 3.1.2 (July, 14 2021)
- Improved reverse BWT performance with libsais 2.4.0

Changes in 3.1.1 (June, 24 2021)
- divsufsort library is replaced with libsais 2.3.0
- back40computing library is replaced with cub from CUDA Toolkit 11.3

Changes in 3.1.0 (July 8, 2012)
- Added Kepler GPU support with CUDA Toolkit 4.2

Changes in 3.0.0 (August 26, 2011)
- NVIDIA GPU acceleration of forward ST algorithms
- Added Sort Transform of order 7 & 8 (GPU only)

Changes in 2.8.0 (August 8, 2011)
- Added parallel version of LZP algorithm
- Large RAM pages (2 MB) support for Windows
- Improved performance of ST and BWT algorithms

Changes in 2.7.0 (June 5, 2011)
- Improved performance of LZP algorithm

Changes in 2.6.1 (May 4, 2011)
- Fixed bug in segmentation algorithm

Changes in 2.6.0 (April 30, 2011)
- Added Sort Transform of order 6

Changes in 2.5.0 (March 20, 2011)
- Some minor performance improvments
- CRC32 replaced with Adler32

Changes in 2.4.5 (January 3, 2011)
- Improved performance of reverse BWT and ST algorithms

Changes in 2.4.0 (October 18, 2010)
- Improved performance of reverse BWT and ST algorithms

Changes in 2.3.0 (August 9, 2010)
- Improved performance of QLFC algorithm

Changes in 2.2.5 (July 5, 2010)
- Added parallel version of segmentation algorithm

Changes in 2.2.0 (June 15, 2010)
- Added parallel version of reverse BWT transform
- Added parallel version of forward ST transform

Changes in 2.1.5 (June 1, 2010)
- Improved multi-core systems support
- Improved segmentation algorithm

Changes in 2.1.0 (May 17, 2010)
- Added GNU C++ compiler support
- Added makefile

Changes in 2.0.0 (May 3, 2010)
- Released source code under LGPL license
- Added multi-core systems support
- Added fast "-f" compression mode
- Added Sort Transform of order 3

Changes in 1.0.3 (April 11, 2010)
- Fixed bug in block-sorting algorithm
- Added support for large files(>2Gb long)

Changes in 1.0.1 (April 8, 2010)
- Decreased memory usage from 6 to 5 times per block size

Changes in 1.0.0 (April 7, 2010)
- First public version for community technology preview
Loading

0 comments on commit 69f9448

Please sign in to comment.