Benchmark charts
Speedup distribution
Each dot is one finalized dataset/thread run on WindowsThread sweep
Speedup across finalized thread counts on WindowsMemory
Baseline vs optimized peak memory on WindowsWhat is accelerated
This task targets MDAnalysis · RMSD in mdanalysis. The benchmarked result
preserves the declared scientific output gate while reducing CPU runtime on the listed datasets.
Also searched as: RMSD, root mean square deviation, structural alignment, molecular dynamics.
Supported scope
Correct ONLY for the exact benchmark shape: RMSD over a Universe whose trajectory is a DCDReader or a ChainReader-of-DCDReaders, with NO groupselections (single select-RMSD, output is the 3-column [frame, time, rmsd] array), and run() invoked with no frame… Read full supported scope
Correct ONLY for the exact benchmark shape: RMSD over a Universe whose trajectory is a DCDReader or a ChainReader-of-DCDReaders, with NO groupselections (single select-RMSD, output is the 3-column [frame, time, rmsd] array), and run() invoked with no frame slicing (start=None, stop=None, step=None, frames=None) on the default serial backend. The fast_compute bulk path streams frames sequentially from each segment's DCDFile.readframes() and fills output column 0 with np.arange(n) and column 1 with a precomputed cumulative-time vector. This is bit-exact to upstream (pearson_r=1.0, max_abs_diff=0.0 in finalized rows) at ~3.3-4.1x speedup. The has_groups branch (groupselections present) is handled by delegating per-frame to the original _single_frame, so that case is preserved. A chunked per-frame fallback covers non-ChainReader / non-DCD readers (e.g. XTC) and is also generic-correct for the no-slicing, no-groups case.
Out-of-scope behavior
silent fallback to upstream
Show detailed speedup table 10 runs
| Dataset | Tier | Platform | Threads | Baseline | Optimized | Speedup | Memory | Concordance | Pass |
|---|---|---|---|---|---|---|---|---|---|
adk_dims_concat_large | large | Windows | 1 | 8.49 min | 2.35 min | 3.61× | 4.2 → 4.2 GB | — | pass |
adk_dims_concat_medium | medium | Windows | 1 | 5.29 min | 1.31 min | 4.03× | 2.1 → 2.1 GB | — | pass |
adk_dims_concat_tiny | small | Windows | 1 | 1.35 min | 24.24 s | 3.33× | 0.8 → 0.8 GB | — | pass |
adk_perturbed_cycle_large | ood_large | Windows | 1 | 8.37 min | 2.59 min | 3.23× | 4.2 → 4.2 GB | — | pass |
adk_perturbed_cycle_xlarge | ood_xlarge | Windows | 1 | 20.00 min | 6.16 min | 3.25× | 8.3 → 8.3 GB | — | pass |
adk_dims_concat_large | large | macOS | 1 | 5.83 min | 1.43 min | 4.09× | 7.5 → 6.6 GB | — | pass |
adk_dims_concat_medium | medium | macOS | 1 | 2.94 min | 42.02 s | 4.20× | 4.2 → 3.7 GB | — | pass |
adk_dims_concat_tiny | small | macOS | 1 | 1.02 min | 14.20 s | 4.30× | 1.7 → 1.4 GB | — | pass |
adk_perturbed_cycle_large | ood_large | macOS | 1 | 5.55 min | 1.58 min | 3.52× | 7.4 → 6.7 GB | — | pass |
adk_perturbed_cycle_xlarge | ood_xlarge | macOS | 1 | 11.17 min | 3.27 min | 3.42× | 13.4 → 11.5 GB | — | pass |
Frequently asked questions
Why is MDAnalysis RMSD slow?
MDAnalysis RMSD is CPU-bound, and the stock implementation in mdanalysis leaves performance on the table in its core numerical work. On the benchmark datasets the original takes 5.29 min where the AutoZyme path takes 1.31 min (4.03× faster).
How do I make MDAnalysis RMSD faster?
Install AutoZyme and activate the mdanalysis patch, then keep using MDAnalysis RMSD exactly as before. AutoZyme transparently substitutes the faster, output-validated path, up to 4.03× faster on the benchmark datasets, with no pipeline or API changes.
Does the AutoZyme speedup change the MDAnalysis RMSD output?
No. The accelerated path returns bit-for-bit identical results to the original mdanalysis implementation (maximum absolute difference 0), checked by a frozen concordance gate on every benchmark dataset.
How do I install the mdanalysis speedup?
In Python: pip install autozyme, then import autozyme and autozyme.activate("mdanalysis"). The patch applies automatically the next time you call MDAnalysis RMSD.