Skip to main content
Última execució

Benchmarks i precisió

Mesures empíriques de rendiment i precisió que comparen Siderust amb biblioteques d'astronomia establertes, testejat contra ERFA/SOFA com a implementació de referència.

Resultats clau

Fins a 14×

Més ràpid que ERFA (C)

Les transformacions compostes com la rotació BPN i equatorial→horitzontal aconsegueixen acceleracions de 14×. Les operacions d'un sol pas igualen la velocitat del C pur.

< 5 mas

Precisió sub-mil·lisegon d'arc

Error angular màxim inferior a 5 mil·lisegons d'arc en totes les transformacions de coordenades testejades. GMST i el resolutor de Kepler aconsegueixen precisió de màquina.

1.000

Entrades de test aleatòries per experiment

Metodologia transparent i reproduïble amb alineament de model documentat. ERFA com a referència, entrades deterministes i eines de codi obert.

Rendiment

Temps per operació en 7 computacions astronòmiques representatives. Cada mesura és la mediana de 10 rondes de 50.000 iteracions. Més baix és més ràpid.

Lectura del gràfic: Cada grup de barres és un experiment; l'alçada de la barra = nanosegons per operació (escala log). Siderust (taronja) és més curt = més ràpid per a transformacions compostes.

Lectura del gràfic: La longitud de la barra = quantes vegades més ràpid és Siderust respecte la implementació C d'ERFA. Valors > 1× (verd) signifiquen que Siderust és més ràpid; < 1× (ambre) significa que ERFA C és més ràpid. La línia discontínua marca la velocitat igual.

Què signifiquen aquests números?

Les transformacions compostes (rotació BPN, equatorial→horitzontal, posició del Sol) encadenen múltiples passos: precessió, nutació, temps sideral, trigonometria esfèrica. L'arquitectura de Siderust evita al·locacions intermèdies i recomputacions redundants, aconseguint acceleracions de 2–14× respecte el codi C d'ERFA.

Les operacions d'un sol pas (GMST, resolutor de Kepler, transformació eclíptica, posició de la Lluna) són kernels numèrics compactes on Siderust rendeix dins del 20–45% del C pur; un resultat esperat per a Rust segur amb aritmètica verificada.

Astropy embolcalla ERFA via Python/pyerfa, afegint sobrecàrrega de l'intèrpret. El seu rendiment aquí reflecteix el cost del bucle Python per element, no l'stack d'alt nivell astropy.coordinates.

Precisió

Error angular p99 respecte la referència ERFA en 1.000 entrades aleatòries per experiment. ERFA és la referència (error zero per definició). Més baix és més precís.

Lectura del gràfic: L'alçada de la barra = error angular p99 en segons d'arc (escala log). Barres més curtes = millor precisió. ERFA és la referència i no es mostra. GMST/ERA i el resolutor de Kepler s'ometen (ambdós aconsegueixen precisió de màquina ~10⁻¹² segons d'arc).

Lectura del gràfic: Cada punt és una combinació biblioteca × experiment. Avall-esquerra és l'ideal (ràpid + precís). Siderust (taronja) es concentra a la zona ràpida i precisa. Passa el cursor per a detalls.

Què significa "precisió" aquí?

L'error angular és la separació angular (segons d'arc) entre la sortida d'una biblioteca i la sortida d'ERFA per a la mateixa entrada. Mesura l'acord amb els models de referència IAU 2006/2000A, no la veritat absoluta.

p99 significa "en el 99% dels 1.000 casos de test, l'error va ser igual o inferior a aquest valor". Això és més estricte que la mitjana i més robust que el pitjor cas individual.

Les diferències de model expliquen les grans diferències. libnova utilitza models antics (precessió de Meeus, nutació IAU 1980) que divergeixen en segons d'arc a graus respecte IAU 2006. Siderust utilitza la precessió IAU 2006 amb la nutació IAU 2000B (77 termes contra 1365), aconseguint ~5 mil·lisegons d'arc de desviació màxima respecte IAU 2000A d'ERFA.

Metodologia

Què es va mesurar

Set computacions astronòmiques representatives, incloent rotacions de marc de coordenades, temps sideral, transformacions eclíptiques/horitzontals, posicions geocèntriques del Sol i la Lluna, i l'equació de Kepler, es van testejar en quatre biblioteques: Siderust (Rust), ERFA (C, la implementació de referència de la IAU), Astropy/pyerfa (Python embolcallant ERFA C) i libnova (C).

Entrades de test

1.000 entrades aleatòries per experiment (llavor = 42 per reproduïbilitat), cobrint Dates Julianes de ~1900–2100 i posicions celestes uniformement distribuïdes. Cada biblioteca va rebre entrades idèntiques en unitats idèntiques (radians, JD TT).

Mesura de rendiment

10 rondes × 50.000 iteracions per ronda. Mètrica reportada: mediana ns/op. Els benchmarks es van executar en un sol nucli amb turbo boost desactivat quan va ser possible. Les rondes d'escalfament es descarten.

Maquinari

Alineament de model

Abans de comparar sortides, cada experiment documenta una llista de verificació d'alineament explícit: unitats, escales temporals, paràmetres d'orientació terrestre, política de refracció i identificadors de model astronòmic. Quan les biblioteques no poden fer coincidir els models exactament, l'experiment s'etiqueta com a desajust de model i les diferències de precisió s'atribueixen a opcions de model, no a errors. Els experiments que aconsegueixen un alineament de model complet s'etiqueten com a paritat de model.

Advertències i transparència

  • Desajust de model. La majoria d'experiments comparen models astronòmics diferents (nutació IAU 2000B vs 2000A, precessió de Meeus vs IAU 2006). Les grans diferències de precisió reflecteixen opcions de model, no problemes de correcció. Només equ_horizontal i kepler_solver aconsegueixen paritat de model completa.
  • Astropy ≠ stack complet. Els resultats d'"Astropy" criden kernels C d'ERFA directament via pyerfa en un bucle Python. Això no mesura el framework d'alt nivell astropy.coordinates, que afegeix sobrecàrrega per al maneig d'unitats, transformacions de marc i conversions temporals.
  • Una sola màquina. Tots els benchmarks es van executar en una màquina (Intel Core Ultra 9 185H). Les ràtios de rendiment són més transferibles que els valors absoluts de ns/op.
  • Sense EOP (Paràmetres d'Orientació Terrestre). Tots els experiments estableixen el moviment polar i UT1−UTC a zero. La precisió en aplicacions reals depèn de l'accés als butlletins IERS per a aquestes correccions.
  • libnova utilitza models diferents. libnova implementa algorismes de l'era Meeus. Els seus grans errors (segons d'arc a graus) són esperats i no indiquen errors en libnova; apunta a un nivell de precisió diferent.

Per què Siderust?

Rendiment on compta. Les transformacions compostes que són el coll d'ampolla en pipelines reals (apuntat, planificació d'observació, propagació orbital) s'executen 2–14× més ràpid que ERFA C, sense pèrdua de precisió.
Precisió validada. Acord sub-mil·lisegon d'arc amb ERFA/SOFA en tot el rang d'èpoques J1900–J2100, amb resultats de test auditable públicament.
Seguretat de Rust. Segur en memòria, sense comportament indefinit, sense curses de dades. Crític per a programari de missió i sistemes empotrats on els errors de C/C++ tenen conseqüències reals.
Coordenades amb seguretat de tipus. Aplicació de marc de referència i unitats en temps de compilació; intercanviar RA per Dec o barrejar J2000 amb ITRF és un error de compilació, no un error en temps d'execució.
no_std compatible. Funciona en objectius empotrats sense al·locador; ideal per a programari de vol espacial, FPGAs i sistemes amb recursos limitats.

Reproduir aquests resultats

Tots els benchmarks són generats pel repositori de codi obert Siderust Lab. Per reproduir:

# Clone the lab repo (includes submodules for all libraries)
git clone --recursive https://github.com/Siderust/lab.git
cd lab

# Build all adapters and run all experiments (N=1000, seed=42)
./run.sh

# Results appear in latest_results/<timestamp>/
# Each experiment directory contains per-library JSON files
# with full accuracy percentiles and performance samples.

Requereix: Rust ≥ 1.80, GCC, Python ≥ 3.10, i ~2 GB de disc. L'execució completa triga aproximadament 5–10 minuts.