All Projects → kurpicz → pwm

kurpicz / pwm

Licence: BSD-2-Clause license
Parallel Wavelet Tree and Wavelet Matrix Construction

Programming Languages

C++
36643 projects - #6 most used programming language
CMake
9771 projects
c
50402 projects - #5 most used programming language
python
139335 projects - #7 most used programming language

Projects that are alternatives of or similar to pwm

AppiumGrid
A framework for running appium tests in parallel across devices and also on desktop browser... U like it STAR it !!
Stars: ✭ 17 (+0%)
Mutual labels:  parallel
bascomtask
Lightweight parallel Java tasks
Stars: ✭ 49 (+188.24%)
Mutual labels:  parallel
rTRNG
R package providing access and examples to TRNG C++ library
Stars: ✭ 17 (+0%)
Mutual labels:  parallel
marathon
Cross-platform test runner written for Android and iOS projects
Stars: ✭ 398 (+2241.18%)
Mutual labels:  parallel
YACLib
Yet Another Concurrency Library
Stars: ✭ 193 (+1035.29%)
Mutual labels:  parallel
Galaxy
Galaxy is an asynchronous parallel visualization ray tracer for performant rendering in distributed computing environments. Galaxy builds upon Intel OSPRay and Intel Embree, including ray queueing and sending logic inspired by TACC GraviT.
Stars: ✭ 18 (+5.88%)
Mutual labels:  parallel
parallel-non-linear-gaussian-smoothers
Companion code in JAX for the paper Parallel Iterated Extended and Sigma-Point Kalman Smoothers.
Stars: ✭ 17 (+0%)
Mutual labels:  parallel
sst-core
SST Structural Simulation Toolkit Parallel Discrete Event Core and Services
Stars: ✭ 82 (+382.35%)
Mutual labels:  parallel
PTTmineR
Parallel Searching and Crawling Data from PTT 🚀
Stars: ✭ 31 (+82.35%)
Mutual labels:  parallel
raptor
General, high performance algebraic multigrid solver
Stars: ✭ 50 (+194.12%)
Mutual labels:  parallel
quagmire
Python surface process framework on highly scalable unstructured meshes
Stars: ✭ 13 (-23.53%)
Mutual labels:  parallel
Parallel-NDJSON-Reader
Parallel NDJSON Reader for Python
Stars: ✭ 13 (-23.53%)
Mutual labels:  parallel
noroutine
Goroutine analogue for Node.js, spreads I/O-bound routine calls to utilize thread pool (worker_threads) using balancer with event loop utilization. 🌱
Stars: ✭ 86 (+405.88%)
Mutual labels:  parallel
Parrows
Using Arrows to model parallel processes/computations.
Stars: ✭ 18 (+5.88%)
Mutual labels:  parallel
Linux-Kernel-Driver-Programming
Implementation of PCI drivers, kprobe, sysfs, devfs, sensor driver, miscdevices, synchronization
Stars: ✭ 43 (+152.94%)
Mutual labels:  parallel
PGD
A Parallel Graphlet Decomposition Library for Large Graphs
Stars: ✭ 68 (+300%)
Mutual labels:  parallel
codeceptjs-bdd
⭐️ ⭐️⭐️ Migrated to Salesforce Open Source Platform - https://github.com/salesforce/codeceptjs-bdd
Stars: ✭ 24 (+41.18%)
Mutual labels:  parallel
machine-learning-data-pipeline
Pipeline module for parallel real-time data processing for machine learning models development and production purposes.
Stars: ✭ 22 (+29.41%)
Mutual labels:  parallel
pyfuncol
Functional collections extension functions for Python
Stars: ✭ 32 (+88.24%)
Mutual labels:  parallel
video features
Extract video features from raw videos using multiple GPUs. We support RAFT and PWC flow frames as well as S3D, I3D, R(2+1)D, VGGish, CLIP, ResNet features.
Stars: ✭ 225 (+1223.53%)
Mutual labels:  parallel

Parallel (Shared Memory and External Memory) Wavelet Tree and Wavelet Matrix Construction Build Status

The wavelet tree and wavelet matrix are compact full text indices that can answer access, rank, and select queries (among others) for a text in time logarithmic in the size of the alphabet. This project contains multiple wavelet tree and wavelet matrix construction algorithms, all implemented in C++.

Sequential and Parallel Shared Memory Algorithms

We implemented different simple but very fast sequential and parallel wavelet tree (WT) and wavelet matrix (WM) construction algorithms. The are based on two ideas, namely prefix counting (pc) and prefix sorting (ps).

Using these ideas, we have implemented:

  1. a sequential version of the algorithms (wx_pc and wx_ps),
  2. a parallel version of the algorithms (wx_ppc and wx_pps),
  3. a parallel version of the algorithms using domain decomposition (wx_dd_pc and wx_dd_ps), and
  4. a version of pc that scans the text just twice and fills all levels but the first level at once (indicated by an _ss-suffix).

In addition, there are also a naive construction algorithms (wx_naive). Replace wx with either wt or wm for the corresponding WT- or WM-construction algorithm.

A detailed description and benchmarks of the implemented algorithms can be found here (arXiv preprint).

@inproceedings{Fischer2018WT,
  author    = {Johannes Fischer and Florian Kurpicz and Marvin L{\"{o}}bel},
  title     = {Simple, Fast and Lightweight Parallel Wavelet Tree Construction},
  booktitle = {Proceedings of the 20th Workshop on Algorithm Engineering and Experiments ({ALENEX})},
  pages     = {9--20},
  publisher = {{SIAM}},
  year      = {2018}
}

Sequential and Parallel (Semi-)External Memory Algorithms

We also implemented (semi-)external memory WT and wavelet WM algorithms. In the semi-external memory model, we keep all data that requires random access in main memory, whereas all other properties/limitations of the external memory mode are still effective.

We have implemented the following algorithms:

  1. a sequential semi-external version of wx_pc,
  2. two different semi-external versions of wx_ps, where one works in-place,
  3. a parallel semi-external version of wx_ppc,
  4. a sequential fully external version of wx_ps, and
  5. a parallel fully external version that is similar to wx_dd_pc.

How to get it?

First clone this repository, then build all executables.

git clone https://github.com/kurpicz/pwm.git
cd pwm
mkdir build
cd build
cmake ..
make

This will create an executable src/benchmark which allows you to run all our algorithms. To this end, we provide a simple command line interface. Constructing WTs and WMs for a text with (all) our algorithms can be done by running ./src/benchmark -f <path_to_file>. To get a list of the other available options run ./src/benchmark --help.

If you want to test the algorithms simply type make check in the build directory. Then, we create WTs and WMs with all our algorithms, use them to reconstruct the text, and tell you if something went wrong.

Building Other Wavelet Tree Construction Algorithms for Benchmarking

We want to make the comparison of our algorithms with the state of the art as easy as possible. To this end, we include all wavelet tree construction algorithms that have publicly available code in this project. Since some have dependencies, not all are build by default. We offer the following options:

  1. PWM_BUILD_COMPETITORS Build competitors. Default: enabled.
  2. PWM_ENABLE_CILK_ALGORITHM Build parallel competitors that require Cilk (only available in gcc < 8.0.0). Default: enabled.
  3. PWM_BUILD_SDSL_WT Build competitors that depend on the SDSL, which has to be installed locally. Default: disabled.
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].