alpaka-group/alpaka

Abstraction Library for Parallel Kernel Acceleration :llama:

What it solves

Alpaka is a header-only C++20 abstraction library designed to provide performance portability across different hardware accelerators. It allows developers to write a single implementation of a parallel kernel without having to write separate code for different vendor-specific APIs like CUDA, HIP, SYCL, or OpenMP.

How it works

Alpaka uses a domain decomposition strategy similar to the CUDA grid-blocks-threads model. Algorithms are divided into a multi-dimensional grid of uniform work items (kernels) executed in parallel threads. These threads are organized into blocks, where threads within a block can interact via fast shared memory and low-level synchronization. Blocks are executed independently, allowing the library to adapt the execution to the available hardware at runtime.

Who it’s for

It is intended for accelerator developers and scientists who need to run high-performance parallel code across diverse hardware, including CPUs (x86, ARM, RISC-V, Power 8+) and GPUs from NVIDIA, AMD, and Intel.

Highlights

  • Multi-Backend Support: Supports CUDA, HIP, SYCL, OpenMP, std::thread, and TBB.
  • Performance Portability: A single kernel implementation is required for multiple platforms.
  • Runtime Selection: The decision of which accelerator back-end executes a kernel can be made at runtime.
  • Header-Only: The library is header-only and requires no building of the library itself.
  • Platform Independent: Works across Linux, Windows, and macOS.

Related

  • Project
  • Project
  • Project
  • Project
  • Project