Description
RaftLib is a C++ Library for enabling stream/data-flow parallel computation. Using simple right shift operators (just like the C++ streams that you would use for string manipulation), you can link parallel compute kernels together. With RaftLib, we do away with explicit use of pthreads, std::thread, OpenMP, or any other parallel "threading" library. These are often mis-used, creating non-deterministic behavior. RaftLib's model allows lock-free FIFO-like access to the communications channels connecting each compute kernel. The full system has many auto-parallelization, optimization, and convenience features that enable relatively simple authoring of performant applications. This project is currently in the alpha stage (recently emerging from a PhD thesis). The beta release will bring back multi-node support, along with (planned) container support for the remote machines. Feel free to give it a shot, if you have any issues, also feel free to send the authors an e-mail.
RaftLib alternatives and similar libraries
Based on the "Concurrency" category.
Alternatively, view RaftLib alternatives based on common mentions on social networks and blogs.
-
moodycamel
A fast multi-producer, multi-consumer lock-free concurrent queue for C++11 -
Taskflow
A General-purpose Parallel and Heterogeneous Task Programming System -
readerwriterqueue
A fast single-producer, single-consumer lock-free queue for C++ -
C++ Actor Framework
An Open Source Implementation of the Actor Model in C++ -
ck
Concurrency primitives, safe memory reclamation mechanisms and non-blocking (including lock-free) data structures designed to aid in the research, design and implementation of high performance concurrent systems developed in C99+. -
MPMCQueue.h
A bounded multi-producer multi-consumer concurrent queue written in C++11 -
VexCL
VexCL is a C++ vector expression template library for OpenCL/CUDA/OpenMP -
continuable
C++14 asynchronous allocation aware futures (supporting then, exception handling, coroutines and connections) -
SPSCQueue.h
A bounded single-producer single-consumer wait-free and lock-free queue written in C++11 -
A C++14 library for executors
C++ library for executors -
Bolt
Bolt is a C++ template library optimized for GPUs. Bolt provides high-performance library implementations for common algorithms such as scan, reduce, transform, and sort. -
xenium
A C++ library providing various concurrent data structures and reclamation schemes. -
thread-pool
A modern, fast, lightweight thread pool library based on C++20 -
CUB
THIS REPOSITORY HAS MOVED TO github.com/nvidia/cub, WHICH IS AUTOMATICALLY MIRRORED HERE. -
SObjectizer
SObjectizer: it's all about in-process message dispatching! -
BlockingCollection
C++11 thread safe, multi-producer, multi-consumer blocking queue, stack & priority queue class -
Light Actor Framework
Laughably simple yet effective Actor concurrency framework for C++20 -
Easy Creation of GnuPlot Scripts from C++
A simple C++17 lib that helps you to quickly plot your data with GnuPlot -
cupla
The project alpaka has moved to https://github.com/alpaka-group/cupla -
alpaka
The project alpaka has moved to https://github.com/alpaka-group/alpaka
Analyze your C and C++ projects with just one click.
* Code Quality Rankings and insights are calculated and provided by Lumnify.
They vary from L1 to L5 with "L5" being the highest.
Do you think we are missing an alternative of RaftLib or a related project?
Popular Comparisons
README
RaftLib is a C++ Library for enabling stream/data-flow parallel computation. Using simple right shift operators (just like the C++ streams that you would use for string manipulation), you can link parallel compute kernels together. With RaftLib, we do away with explicit use of pthreads, std::thread, OpenMP, or any other parallel "threading" library. These are often mis-used, creating non-deterministic behavior. RaftLib's model allows lock-free FIFO-like access to the communications channels connecting each compute kernel. The full system has many auto-parallelization, optimization, and convenience features that enable relatively simple authoring of performant applications. Feel free to give it a shot, if you have any issues, please create an issue request. Minor issues, the Slack group is the best way to resolve. We take pull requests!! For benchmarking, feel free to send the authors an email. We've started a benchmark collection, however, it's far from complete. We'd love to add your code!!
User Group / Mailing List: slack channel
=============
Build status
Pre-requisites
OS X & Linux
- Compiler: c++17 capable -> Clang, GNU GCC 5.0+, or Intel icc
- Latest build runs under Linux with above compilers on both x86 and AArch64, with both pthreads and QThreads.
- OS X M1 runs, compiles, but has some test case hiccups on templates, but doesn't seem to impact functionality.
- Note for OS X users without a /user/local, specify an install prefix when using CMake.
Windows
- Builds and runs under Win10
Install
Make a build directory (for the instructions below, we'll write [build]). If you want to build the OpenCV example, then you'll need to add to your cmake invocation:
-DBUILD_WOPENCV=true
To use the QThreads User space HPC threading library you will need to use the version with the RaftLib org and follow the RaftLib specific readme. This QThreads version has patches for hwloc2.x applied and fixes for test cases. To compile RaftLib with QThreads linked, add the following (assumes the QThreads library is in your path):
-DUSEQTHREAD=1
Building the examples, benchmarks and tests can be disabled using:
-DBUILD_EXAMPLES=false
-DBUILD_BENCHMARKS=false
-DBUILD_TESTS=false
To build:
mkdir [build]
cd [build]
cmake ..
make && make test
sudo make install
NOTE: The default prefix in the makefile is:
PREFIX ?= /usr/local
Using
- When building applications with RaftLib, on Linux it is best to
use the pkg-config file, as an example, using the poc.cpp example,
bash g++ `pkg-config --cflags raftlib` poc.cpp -o poc `pkg-config --libs raftlib`
Feel free to substitute your favorite build tool. I use Ninja and make depending on which machine I'm on. To change out, use cmake to generate the appropriate build files with the -Gxxx flag.
Citation
If you use this framework for something that gets published, please cite it as:
@article{blc16,
author = {Beard, Jonathan C and Li, Peng and Chamberlain, Roger D},
title = {RaftLib: A C++ Template Library for High Performance Stream Parallel Processing},
year = {2016},
doi = {http://dx.doi.org/10.1177/1094342016672542},
eprint = {http://hpc.sagepub.com/content/early/2016/10/18/1094342016672542.full.pdf+html},
journal = {International Journal of High Performance Computing Applications}
}
Other Info Sources
- OpenCV wrappers for RaftLib
- Project web page
- Project wiki page
- Blog post intro
- Jonathan Beard's thesis
- Views on parallel computing, general philosphy
- Feel free to e-mail one of the authors of the repo