Hashing at the speed of light on modern CUDA-accelerators
warpcore
is a framework for creating high-throughput, purpose-built hashing data structures on CUDA-accelerators.
This library provides the following data structures:
warpcore::SingleValueHashTable
: stores a set of key-value pairswarpcore::HashSet
: stores a set of keyswarpcore::CountingHashTable
: keeps track of the number of occurrences of each inserted keywarpcore::BloomFilter
: pattern-blocked bloom filter for approximate membership querieswarpcore::MultiValueHashTable
: stores a multi-set of key-value pairswarpcore::BucketListHashTable
: alternative variant of warpcore::MultiValueHashTable
warpcore::MultiBucketHashTable
: alternative variant of warpcore::MultiValueHashTable
Implementations support key types std::uint32_t
and std::uint64_t
together with any trivially copyable value type. In order to be adaptable to a wide range of possible usecases, we provide a multitude of combinable modules such as hash functions, probing schemes, and data layouts.
warpcore
has won the best paper award at the IEEE HiPC 2020 conference (link to manuscript)(link to preprint) and is based on our previous work on massively parallel GPU hash tables warpdrive
which has been published in the prestigious IEEE IPDPS conference (link to manuscript).
This library is still under heavy development. Users should expect breaking changes and refactoring to be common. Developement mainly takes place on our in-house GitLab instance. However, we plan to migrate to GitHub in the near future.
Note: Dependencies are automatically managed via CMake.
warpcore
warpcore
is header only and can be incorporated manually into your project by downloading the headers and placing them into your source tree.
warpcore
to a CMake Projectwarpcore
is designed to make it easy to include within another CMake project. The CMakeLists.txt
exports a warpcore
target that can be linked 1 into a target to setup include directories, dependencies, and compile flags necessary to use warpcore
in your project.
We recommend using CMake to fetch warpcore
into your project.
This will take care of downloading warpcore
from GitHub and making the headers available in a location that can be found by CMake. Linking against the warpcore
target will provide everything needed for warpcore
to be used by my_target
.
1: warpcore
is header-only and therefore there is no binary component to "link" against. The linking terminology comes from CMake's target_link_libraries
which is still used even for header-only library targets.
warpcore
Since warpcore
is header-only, there is nothing to build to use it.
To build the tests, benchmarks, and examples:
Binaries will be built into:
build/tests/
build/benchmarks/
build/examples/
Take a look at the examples, test your own system performance using the benchmark suite and be sure everything works as expected by running the test suite.
warpcore
? BibTeX:
warpcore Copyright (C) 2018-2021 Daniel Jünger
modified by Markus Vieth
This program comes with ABSOLUTELY NO WARRANTY. This is free software, and you are welcome to redistribute it under certain conditions. See the file [LICENSE](LICENSE) for details.