Explanation#
The ideas behind aether, grouped by topic and ordered from first use to advanced. Each page answers one question; new words are in the Glossary.
Arrays and memory#
What a view is, who owns a buffer, and why an expression does not allocate.
- Views and items
What a
Viewis, and why anItemlives in registers.- Expression templates
Why
a + b*sdoes not allocate.- Memory ownership
Who owns a buffer, host or device, and how to copy it.
Run kernels#
Code that runs on both machines, with several devices, and on the CPU’s vector units.
- Host vs device code
What
AETHER_DEVICEHOSTmeans, and when you need a GPU kernel entry point.- CPU SIMD backend
How aether vectorizes on the CPU, with no GPU involved.
- Why the numerics stay domain-independent
What aether knows, what it does not, and where mathematics earns its place.
- Multi-device residency
Keep a replica per GPU, or partition data across several.
Numerics and precision#
The fold order, division, compensated sums and non-finite rules every target computes against, and how to get more than float or double.
- Numerics contract
The rules every target computes against.
- Accumulation
Adding many producers’ contributions into one per-sample slot without a data race.
- Banded/emulated real arithmetic
BandedReal: double precision from threefloatlimbs, and when to use it.
Interoperability#
- Interoperability
How a NumPy, CuPy or PyTorch array becomes an aether
Viewwithout a copy. The contract the family shares is on raptor’s interoperability page.
Large matrices#
- Linear algebra for large matrices
LU, Cholesky, eigenvalues, QR and ordered block sums by a team of threads on one matrix, up to 4096 by 4096, with the scratch each routine needs.
Embedded C#
- Plain-C reference core
Standalone C99 functions that reproduce aether’s arithmetic bit for bit.