Skip to main content

FlashDiffusion

Tiled, memory-efficient diffusion maps eigensolver — never materialises the O(N²) kernel matrix.

What this enables

Task N limit (dense) N limit (FlashDiffusion)
Diffusion map eigenvectors ~20k (8 GB) ~10M (memory: O(N·tile))
Carré du Champ metric tensor ~10k ~1M
Schrödinger bridge / Doob h-transform ~10k ~1M
MD trajectory slow manifold ~5k frames ~500k frames

The primitive

from flashdiffusion import FlashDiffusion

# K(i,j) = exp(-beta * score_mod(xi, xj))
# with Coifman-Lafon alpha-normalisation and optional Doob h-transform
out = FlashDiffusion(X, X, V, beta=1.0, alpha=0.5, h=None)

FlashDiffusion(Q, K, V, beta, alpha, h) is the single kernel underlying everything:

  • DMAP mode (Q=K=X, V=eigvec guess): symmetric diffusion matvec for Lanczos
  • AMAP mode (Q≠K, asymmetric W): directed/NESS Markov operator (DAC §3)
  • Doob mode (h≠None): h-transform of any of the above (DAC §4)

Design

kernel.py        FlashDiffusion primitive — tiled O(N·tile) memory matvec
dmap.py          DiffusionMap class: fit() precomputes rscale; transform() calls kernel
eigensolver.py   Lanczos/LOBPCG with bf16→fp32→fp64 precision ramp; orthog in fp64
cdc.py           Carré du Champ operator Γ(f,g) and metric tensor M = ΣᵢGᵢGᵢᵀ
utils.py         Bandwidth selection (self-tuning, median), Nyström extension

Physics background

Transformer attention, diffusion maps, and magnetic Laplacians are three regimes of a single Markov geometry (Candanedo 2025). The EQ/NESS classification:

  • EQ (symmetric W): DMAP — reversible diffusion, detailed balance
  • NESS (asymmetric W): self-attention — directed, probability current ≠ 0
  • Doob deformation: h-transform preserves EQ class (Theorem 5.1, DAC)

The Coifman-Lafon α-normalisation is an exact Doob transform (Corollary 4.2, DAC).

FlashDiffusion SM120 — RTX 6000 / Consumer Blackwell

What's in this package

flashdiffusion/csrc/flash_diffusion_sm120.cu   ← kernel
flashdiffusion/kernel_cuda_sm120.py            ← Python wrapper
setup_sm120.py                                  ← build script
sm120_notebook.py                               ← notebook cells

SM120 vs SM80 kernel differences

Feature SM80 (A100) SM120 (RTX 5090)
MMA instruction mma.sync f16→f32 mma.sync f16→f32 (same)
Tile size 64×64 128×128
SMEM async __syncthreads cp.async pipeline
TMA no yes (not used yet)
TMEM no no (SM100 only)
Cluster shape 1×1×1 1×1×1 (no multicast)
WGMMA/UMMA no no (SM100 only)

The inner GEMM instruction is identical to SM80. The speedup comes from:

  1. Larger 128×128 tiles → better arithmetic intensity
  2. cp.async pipeline → hides GMEM→SMEM load latency
  3. Higher RTX 5090 clock speed

Build

# on a machine with RTX 5090
FLASHDIFFUSION_BUILD_CUDA=1 \
TORCH_CUDA_ARCH_LIST="12.0" \
python setup_sm120.py build_ext --inplace

Or in notebook (see sm120_notebook.py Cell 2).

Expected performance vs SM80

N=200k  SM80 A100  precompute: 0.4s   Lanczos: ~100s
N=200k  SM120 5090 precompute: ~0.3s  Lanczos: ~60s  (estimate)

RTX 5090 has higher memory bandwidth than A100 (1.8 TB/s vs 2.0 TB/s) but our scalar kernel is compute-bound not memory-bound. The cp.async pipeline and larger tiles are the main wins.

Next step: TiledMMA on SM120

The mma.sync.aligned.m16n8k16 instruction on SM120 uses the same CuTe atom as SM80: SM80_16x8x16_F32F16F16F32. Wiring TiledMMA replaces the scalar inner loop, giving ~10× speedup. This is flash_diffusion_sm120_v2.cu — to be added next.

CUDA roadmap

Current: NumPy reference (validates correctness, runs on CPU). Next: CuTe kernel — SM90 tensor cores, fused prepass+matvec, no online softmax needed (precomputed rscale eliminates the log-sum-exp recurrence that drives FA4 complexity).

prepass:  out_i = Σⱼ K(i,j) · wⱼ          # scalar reduction per row, one kernel
matvec:   out_i = rscaleᵢ · Σⱼ K(i,j) · rscaleⱼ · vⱼ  # vector, same tiling

Both kernels share the same tile loop; only the epilogue differs.

Installation

pip install -e ".[dev]"

Quick start

from flashdiffusion import DiffusionMap

dm = DiffusionMap(beta=1.0, alpha=0.5, n_components=8)
dm.fit(X)               # two prepass tiled reductions, O(N·tile) memory
coords = dm.transform() # Lanczos eigensolver, mixed precision

References

  • Coifman & Lafon (2006) — diffusion maps
  • Candanedo (2025) — diffusion-attention connection, bidivergence, Doob classification
  • Dao et al. (2024) — FlashAttention-4
  • Rohrdanz, Zheng, Clementi (2011) — diffusion maps for MD

Metadata

Release files for flashdiffusion 0.1.2

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for flashdiffusion 0.1.2
File Size Uploaded Provenance Actions
flashdiffusion-0.1.2.tar.gz 43.2 kB With provenance Details for flashdiffusion-0.1.2.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for flashdiffusion 0.1.2
File Interpreter ABI Platform Actions
flashdiffusion-0.1.2-py3-none-any.whl Python 3 none any Details for flashdiffusion-0.1.2-py3-none-any.whl

Total release size: 93.5 kB

Release files / flashdiffusion-0.1.2.tar.gz

Download URL flashdiffusion-0.1.2.tar.gz
Size 43.2 kB
Tags Source
SHA-256 checksum
How to use checksums
f596ba1fec2b357550a83af4b4ea06e3ddd81cb242cd9e00a88f9f78be1dac5d
BLAKE2b-256 checksum
How to use checksums
5b03e6f4171770a48b4e96789223d2ba974123296d5dfe2eb9bb70cb4f43c9e3
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.12

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on May 18, 2026.

Transparency log

Release files / flashdiffusion-0.1.2-py3-none-any.whl

Download URL flashdiffusion-0.1.2-py3-none-any.whl
Size 50.2 kB
Tags Python 3
SHA-256 checksum
How to use checksums
2acb3cda5cecd0f2023c879993f40c12149eae0e4c1030ccd47f0ba5693540ae
BLAKE2b-256 checksum
How to use checksums
6e1c31f6df0e83a35026758df30ef7185073fd5e15c0f6d967d6c2610a3b2201
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.12

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on May 18, 2026.

Transparency log

Security for flashdiffusion 0.1.2

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

Full provenance

Both files in this release have been uploaded with provenance metadata.

Select from 2 files

Attestation for flashdiffusion-0.1.2.tar.gz

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on May 18, 2026.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page