pika is a C++ library for concurrency and parallelism. It implements
senders/receivers (as proposed in P2300) for CPU
thread pools, MPI, and CUDA.
- a C++17-capable compiler:
- CMake 3.18.0 or greater
- header-only Boost 1.71.0 or greater
- hwloc 1.11.5 or greater
pika optionally requires:
- gperftools/tcmalloc, jemalloc, or mimalloc
- CUDA 11.0 or greater
- HIP 4.3.0 or greater
- Boost.Context, Thread, and Chrono on macOS
- Boost.Regex when building pika tools
pika is built using CMake. Please see the documentation of
CMake for help on how to use it. Dependencies are usually available in
distribution repositories. Alternatively, pika can be built using spack (pika spack package). The pika
repository also includes a
shell.nix file for use with nix. The file includes dependencies
for regular development. It is provided for convenience only and is not
comprehensive or guaranteed to be up to date. It may require the nixos unstable
pika is configured using CMake variables. The most important variables are:
PIKA_WITH_MALLOC: This defaults to
tcmallocwhich requires gperftools.
Can be set to
systemcan be useful in debug builds.
PIKA_WITH_CUDA: Enable CUDA support.
PIKA_WITH_HIP: Enable HIP support. To enabled this set the compiler to
hipccinstead of setting the variable explicitly.
PIKA_WITH_MPI: Enable MPI support.
PIKA_WITH_GENERIC_CONTEXT_COROUTINES: Enables the use of Boost.Context for
fiber context switching. This has to be enabled on non-Linux and non-x86
Tests and examples are disabled by default and can be enabled with
pika is a fork of HPX focusing on the
single-node use case complemented by minimal MPI support.
Pick your favourite meaning from the following: