All Projects → lemire → Simdcompressionandintersection

lemire / Simdcompressionandintersection

Licence: apache-2.0
A C++ library to compress and intersect sorted lists of integers using SIMD instructions

Projects that are alternatives of or similar to Simdcompressionandintersection

Mango
mango fun framework
Stars: ✭ 343 (+18.69%)
Mutual labels:  simd, compression
Compressed Vec
SIMD Floating point and integer compressed vector library
Stars: ✭ 25 (-91.35%)
Mutual labels:  simd, compression
Simdcomp
A simple C library for compressing lists of integers using binary packing
Stars: ✭ 331 (+14.53%)
Mutual labels:  simd, compression
Maskedvbyte
Fast decoder for VByte-compressed integers
Stars: ✭ 91 (-68.51%)
Mutual labels:  simd, compression
Thermite
Thermite SIMD: Melt your CPU
Stars: ✭ 141 (-51.21%)
Mutual labels:  algorithms, simd
Turbo-Transpose
Transpose: SIMD Integer+Floating Point Compression Filter
Stars: ✭ 50 (-82.7%)
Mutual labels:  compression, simd
Turbopfor Integer Compression
Fastest Integer Compression
Stars: ✭ 520 (+79.93%)
Mutual labels:  simd, compression
Streamvbyte
Fast integer compression in C using the StreamVByte codec
Stars: ✭ 195 (-32.53%)
Mutual labels:  simd, compression
Stdpack.c
Collection of small public domain de/compressors in plain C.
Stars: ✭ 73 (-74.74%)
Mutual labels:  algorithms, compression
Pygm
🐍 Python library implementing sorted containers with state-of-the-art query performance and compressed memory usage
Stars: ✭ 156 (-46.02%)
Mutual labels:  algorithms, compression
ndzip
A High-Throughput Parallel Lossless Compressor for Scientific Data
Stars: ✭ 19 (-93.43%)
Mutual labels:  compression, simd
Cute headers
Collection of cross-platform one-file C/C++ libraries with no dependencies, primarily used for games
Stars: ✭ 3,274 (+1032.87%)
Mutual labels:  compression
Gozstd
go wrapper for zstd
Stars: ✭ 275 (-4.84%)
Mutual labels:  compression
Zipper
C++ wrapper around minizip compression library
Stars: ✭ 272 (-5.88%)
Mutual labels:  compression
Javascript Patterns
A collection of javascript algorithms, patterns, and techniques
Stars: ✭ 273 (-5.54%)
Mutual labels:  algorithms
Leetcode Go
✅ Solutions to LeetCode by Go, 100% test coverage, runtime beats 100% / LeetCode 题解
Stars: ✭ 22,440 (+7664.71%)
Mutual labels:  algorithms
Dart
Stars: ✭ 278 (-3.81%)
Mutual labels:  algorithms
Php
All Algorithms implemented in Php
Stars: ✭ 272 (-5.88%)
Mutual labels:  algorithms
Cheat Sheet
Data structures & algorithms cheat sheet
Stars: ✭ 271 (-6.23%)
Mutual labels:  algorithms
Hackerrank Solutions
HackerRank concepts & solutions
Stars: ✭ 267 (-7.61%)
Mutual labels:  algorithms

SIMDCompressionAndIntersection

Build Status Code Quality: Cpp

As the name suggests, this is a C/C++ library for fast compression and intersection of lists of sorted integers using SIMD instructions. The library focuses on innovative techniques and very fast schemes, with particular attention to differential coding. It introduces new SIMD intersections schemes such as SIMD Galloping.

This library can decode at least 4 billions of compressed integers per second on most desktop or laptop processors. That is, it can decompress data at a rate of 15 GB/s. This is significantly faster than generic codecs like gzip, LZO, Snappy or LZ4.

Authors: Leonid Boystov, Nathan Kurz, Daniel Lemire, Owen Kaser, Andrew Consroe, Shlomi Vaknin, Christoph Rupp, Bradley Grainger, and others.

Documentation

This work has also inspired other work such as...

Simple demo

Check out example.cpp

You can run it like so:

make example
./example

Usage

make
./unit

To run tests, you can do

./testcodecs

(follow the instructions)

For a simple C library

This library is a C++ research library. For something simpler, written in C, see:

https://github.com/lemire/simdcomp

Comparison with the FastPFOR C++ library

The FastPFOR C++ Library available at https://github.com/lemire/FastPFor implements some of the same compression schemes except that it is not optimized for the compression of sorted lists of integers.

Other recommended libraries

Licensing

Apache License, Version 2.0

As far as the authors know, this work is patent-free.

Requirements

A CPU (AMD or Intel) with support for SSE2 (Pentium 4 or better) is required while a CPU with SSE 4.1* (Penryn [2007] processors or better) is recommended.

A recent GCC (4.7 or better), Clang, Intel or Visual C++ compiler.

A processor support AVX (Intel or AMD).

Tested on Linux, MacOS and Windows. It should be portable to other platforms.

*- The default makefile might assume AVX support, but AVX is not required. For GCC compilers, you might need the -msse2 flag, but you will not need the -mavx flag.

For advanced benchmarking, please see

advancedbenchmarking/README.md

where there is additional information as well as links to real data sets.

Acknowledgement

Thanks to Kelly Sommers for useful feedback.

This work was supported by NSERC grant number 26143.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].