Integrate Rust ENM kernels and qualify native delivery

Aperta
#26 7 commenti 0 reazioni 0 assegnatari Vedi su GitHub

Nessuno ha ancora preso questa issue.

Valutazione

Difficoltà
5/5
Tempo stimato
Più di una settimana
Idoneità per principianti
8/100
Tipo di issue
Funzionalità
Chiarezza
Da chiarire
Stato di attività
Attiva
Stack tecnologico
python, rust

Direzione di ricerca

Start with the assessment at devguide/pending_proposals/rust_enm_kernels.md (commit 439d476), which records the 1TCD baseline and the staged sequence. The first step is a reproducible fresh-process, warm and memory baseline over sizes and contact densities, not a Rust port. This issue is design and qualification work under active maintainer review, so a newcomer should coordinate with the maintainers before editing code.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Descrizione

The maintainer requested comparison with ../molsysmt's Rust-only CPU implementation. That provider uses a private PyO3/NumPy extension built with setuptools-rust, Rayon for bounded threading and faer for dense PCA; its own measurements distinguish cold-start benefits, warm throughput and eigensolver tradeoffs.

ElastNetMT already delegates contact calculation to MolSysMT. Its local candidates are Kirchhoff/Hessian construction, currently NumPy/Numba, while NumPy eigh already executes compiled numerical code. Measure contact preparation, first/repeated construction and diagonalization separately; compare memory use and scientific invariants before choosing a Rust implementation.

Plan a bounded owner-local prototype with explicit array, threading, null-mode and eigenvector-subspace contracts. Qualify it against current physical tests and independent properties. Benchmark faer against the actual NumPy BLAS backend before choosing a spectral backend. Retain provider-owned contacts/interpolation; missing shared operations go to their providers. A bundled native extension changes the current noarch delivery plan (#18/#19), so classify platform-specific native artifacts and coordinate existing suite release controls before production migration.

Acceptance for this study: measured workload decomposition, supported implementation/package design, scientific validation criteria and an explicit staged decision. This issue does not authorize public support claims or establish a speedup from an unmeasured Rust port. Documentation work remains tracked in #8/#13 and the linked documentation repair issue.

Review checkpoint — 2026-10-10

The staged assessment is committed at 439d476: https://github.com/uibcdf/elastnetmt/blob/439d476/devguide/pending_proposals/rust_enm_kernels.md . The sibling checkout was inspected without modification. No Rust ENM engine is implemented.

On the bundled 1TCD structure (497 CA nodes), Python 3.14.7 / NumPy 2.4.6 / MKL 2025.3, a corrected run verifies MKL/OpenMP at one thread and Numba at two. Warm ANM Numba solves take 0.646–0.650 s, of which about 99% is native eigh. The first solve takes 1.721 s. The report preserves individual samples, provider binary digest, initial uncontrolled-MKL samples and their correction; preparation and non-eigh differences are not isolated kernel timings. Peak memory and independent-process confidence intervals remain unmeasured.

Recommended sequence: (1) reproducible fresh-process/warm/memory baseline over sizes and contact densities; (2) private owned Rust Kirchhoff/Hessian prototype retaining Python unit/error/state contracts and public provider contacts; (3) independent physical/eigenspace qualification; (4) separate faer-versus-actual-NumPy comparison; (5) platform-native artifact qualification coordinated with #18/#19; (6) production backend/Numba retirement decision after measured benefit. This issue stays active for that implementation and qualification work; the assessment does not establish a Rust speedup.

Lingua principale
Jupyter Notebook
Stelle
4
Fork
3
Merge medio
18h 50m
PR unite (30g)
1

Preparare l'ambiente

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di uibcdf/elastnetmt

Tutte le issue di uibcdf/elastnetmt

Issue simili

Altre issue su Build System

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.