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 View is, and why an Item lives in registers.

Expression templates

Why a + b*s does 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_DEVICEHOST means, 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 three float limbs, and when to use it.

Interoperability#

Interoperability

How a NumPy, CuPy or PyTorch array becomes an aether View without 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.