Skip to content

Latest commit

 

History

History
89 lines (78 loc) · 4.84 KB

CHANGELOG.md

File metadata and controls

89 lines (78 loc) · 4.84 KB

Changelog

All notable changes to GLASS will be documented here. The format follows Keep a Changelog, and releases use Semantic Versioning.

Added

  • glass::warp::transform_points applies a column-major 4×4 homogeneous transform (float or double) to packed float points, lanes striding the points, in two forms: one transform for all points, or one transform index per point. The per-component expression order is fixed so results are bit-identical to the inlined sphere-placement loop it replaces.
  • glass::warp::any / glass::warp::all wrap __any_sync / __all_sync under the full mask, for symmetry with warp::reduce / warp::argmin_pair.
  • glass::nvidia::thread:: provides one-problem-per-thread cuSOLVERDx implementations for the supported LAPACK subset. The measured sm_120 and sm_87 ladders select it only where it clears the native implementation by the tuning margin.

Changed

  • Pin pytest-gpu-proof 0.5.0 for Python 3.10 support and signed CUDA compiler metadata in fresh GPU receipts.

  • Breaking: NVIDIA operations now require an explicit execution scope (glass::nvidia::block::op, glass::nvidia::warp::op, or glass::nvidia::thread::op); the ambiguous bare glass::nvidia::op re-export is removed.

  • Breaking: the flat backend and suggested_* advisor family is replaced by glass::recommend<op,T,dims...>(), which returns one execution_plan containing implementation family, execution scope, and launch packing. Measured architectures carry paired MathDx and native-only tables.

  • Breaking: advisor operation names use op::potrf and op::ldlt_solve, and rectangular GEMM shape arguments use conventional (M,N,K) order.

  • GLASS_TARGET_SM is the single architecture selector for native dispatch, execution plans, and MathDx descriptors; legacy SMS remains an input alias.

  • glass::block::riccati_gain reuses the symmetric P·B intermediate (BᵀPA = (PB)ᵀA), shrinking its shared-scratch requirement from NU²+NX² to NU²+NX·NU scalars and speeding up the fused gain solve. Results can shift at ULP level relative to earlier releases; riccati_scratch_bytes<T,NX,NU>() reflects the smaller footprint.

  • glass::block::pcg elides trailing barriers that were immediately followed by an explicit __syncthreads() between composed sub-operations (numerically identical, fewer barriers per iteration).

  • Compile-time ger uses a flat one-thread-per-output work mapping (bit-identical results by construction).

  • Documented-overload coverage is measured per overload contract — 669 contracts extracted from Doxygen XML with call-shape evidence (test/api-contracts.json) — instead of per public name, plus 22 declared behavioral correctness obligations checked against the signed receipt.

  • The signed GPU receipt is split into eight dependency-scoped shards with lazy test-binary compilation; development reruns only affected shards, and releases still require a fresh all-shard receipt (now enforced by a no-carry verify policy in release.sh).

  • Layout compatibility of pcg/bdsv (bit-identical [L|D|R] strips + padded vectors) is now DECLARED obligation #20 with a receipt-gated same-system-both-solvers test, and the tuning docs gain a solver-level cutoff calibration recipe (probe → fit → persist).

  • pcg — and the whole block-scope _fast reduction family — is now legal at ANY thread count: the warp shuffle folds bound their sync mask to the active lanes of a ragged last warp (previously a latent full-mask UB that passed by hardware behavior). Multiple-of-32 launches are unchanged bit-for-bit and remain the fast path; test/test_pcg.py sweeps ragged counts again.

Fixed

  • Restricted optimized callers now reload cross-thread handoffs in triangular solves, softmax/logsumexp, LU pivot selection/permutation, pivoted inverse, pivoted LDLT and symmetric eigendecomposition. This fixes wrong results, invalid accesses and divergent control flow seen despite existing barriers (including issue #44). Thread-only solves retain ordinary loads.

  • Optimized regression coverage now retains the minimal failing caller context alongside independent-oracle checks for shared/global memory, runtime sizes, launch geometry, pivoting and trailing synchronization.

  • glass-dispatch.cuh is included in the CMake install file list (previously a CMake-installed GLASS could not compile the bare measured-default face).

  • CMake propagates the cuBLASDx CUTLASS include path when GLASS_ENABLE_MATHDX is on.

  • pcg documentation states the scratch size in BYTES and the dynamic shared-memory launch requirement explicitly (the old wording said "elements", understating the allocation).