Installation#
aether is a header-only C++23 library: using it from C++ is a CMake
find_package(aether CONFIG REQUIRED) against an installed tree, not a
package manager step. A sealed Python payload, aether-dsc, ships the
SAME headers for Python-only consumers that never touch a C++ toolchain
directly — see Python API — aether_dsc.
Requirements#
CMake >= 3.20 and a C++23 compiler (GCC >= 12 or Clang >= 16).
CUDA mode additionally needs CUDA 12.6 or newer (tested with 12.6 and 13.0); nvcc accepts only host compilers up to its own ceiling (GCC 13 for CUDA 12.6), so point it at one with
-DCMAKE_CUDA_HOST_COMPILER=<g++-13>if your default compiler is newer.A GPU is OPTIONAL: build with
AETHER_CPP_MODE=ONand the whole library — including every example on this site — runs on the CPU alone through its OpenMP backend.
From source (C++)#
PREFIX below is the install directory (inside a conda environment,
use ${CONDA_PREFIX}):
# CUDA mode
cmake -DCMAKE_PREFIX_PATH=${PREFIX} -DAETHER_BUILD_TESTS=ON -B build .
# CPU-only mode (no CUDA toolchain needed)
cmake -DCMAKE_PREFIX_PATH=${PREFIX} -DAETHER_CPP_MODE=ON -DAETHER_BUILD_TESTS=ON -B build .
cmake --build build
cmake --install build --prefix ${PREFIX}
A consuming project then links against the installed package:
find_package(aether CONFIG REQUIRED)
target_link_libraries(your_target PRIVATE aether::aether)
aether-dsc (Python)#
aether-dsc carries a sealed, digest-named copy of the same headers for
Python-only consumers — hawk’s NVRTC device-kernel compiler is the
primary one, and any file-only host compiler can reach the same headers
through Payload.serve(). Nothing in the blob is readable C++ source
inside a wheel’s include tree; see Python API — aether_dsc.
# From a source checkout
pip install ./dsc
aether-dsc on PyPI is the sealed header payload that hawk compiles against;
it is installed with hawk automatically (pip install raptor-hawk) and is not
something C++ users install. aether itself is used through CMake, as above.
CUDA architectures#
AETHER_CUDA_ARCHS picks the architectures when CMAKE_CUDA_ARCHITECTURES
is not given:
native(the default): the GPUs in this machine only, the fastest build. With no GPU it builds PTX for the oldest architecture thenvccin use compiles (at leastsm_60), which the driver compiles for any newer GPU at load.all: every architecture from Pascal to Blackwell that thenvccin use still compiles (CUDA 13 drops the ones below Turing).one architecture or a list, such as
86or"75;86": exactly those.
cmake -DAETHER_CUDA_ARCHS=all -B build .
cmake -DAETHER_CUDA_ARCHS="80;90" -B build .
CMAKE_CUDA_ARCHITECTURES, when given, still wins.
Verify#
Build with AETHER_BUILD_TESTS=ON (either mode above), then run the
test-integrity gate directly — never the test binary bare, see
tests/check_gate.sh’s own header comment:
tests/check_gate.sh cpp build/tests/aether_tests # or: cuda