pika is a C++ library for concurrency and parallelism. It implements
senders/receivers (as proposed in P2300) for CPU
thread pools, MPI, and CUDA.


pika requires:

  • a C++17-capable compiler:
    • GCC 9 or greater
    • clang 9 or greater
    • MSVC is likely to work but is not regularly tested
  • CMake 3.18.0 or greater
  • header-only Boost 1.71.0 or greater
  • hwloc 1.11.5 or greater

pika optionally requires:


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 tcmalloc which requires gperftools.
    Can be set to tcmalloc, jemalloc, mimalloc, or system. Setting
    it to system can be useful in debug builds.
  • PIKA_WITH_CUDA: Enable CUDA support.
  • PIKA_WITH_HIP: Enable HIP support. To enabled this set the compiler to
    hipcc instead 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:


View Github