Repository navigation
NeSLE v0.2.0 - verified at scale
Second release, one day after v0.1.0. Everything below is measured, not projected.
Headline numbers (fresh, this release's HEAD)
- A100-SXM4-80GB: 699,456 env-steps/s peak at 65,536 parallel envs (~2.8M NES frames/s, ~46,000x real-time); 161,430 at 4,096 envs = ~746x that machine's CPU. Verified from a clean clone with 69/69 tests green.
- GTX 1050 Ti: 35,488 env-steps/s at 4,096 envs (110x CPU) - +20% over v0.1.0 from this release's optimization pass.
- vs the standard CPU stack (nes-py): ~269x on identical hardware.
Correctness
- Renderer now draws from a vblank-frozen presentation snapshot with a two-region scroll split (SMB's status bar) - eliminates the object-pop / HUD-loss / ghost-content artifacts that affected all recordings (render-only; training was never affected). Object-pop events: 130 -> 21 on a scripted A/B.
- Fixed a use-after-free in the DLPack device-view bindings (tensor could outlive the GPU memory it pointed at).
- Fixed checkpoint resume semantics (--total-timesteps is now cumulative) and resumed-run fps reporting.
Performance work (measured per-change, docs/gpu-scaling.md)
- PPU hot-state register caching: +17% stepping.
- Vectorized bulk copies (snapshot/reset/DMA): +9.5% stepping.
- Hybrid render dispatch: 2.9x faster small-batch rendering (recording/eval).
- Research note with code-level divergence/memory analysis, CuLE et al. survey, and a ranked redesign roadmap (tiers 1-3 open).
Tooling & docs
- Cross-platform CUDA build: python scripts/build_cuda_extension.py (Windows MSVC auto-detection; Linux include fix found on Colab).
- C++ tests now run in CI; smart-reward magnitudes exposed as CLI flags; native-checkpoint eval/recording tool with artifact-aware filtering (examples/native_ppo_eval.py).
- Honest results throughout: the trained 1-1 agent clears the level occasionally (best episode recorded in the README GIF); the 8-world curriculum agent reaches mid-level everywhere but captures no flags. Training checkpoints from the A100 experiments are preserved outside the repo.
Requirements: CUDA GPU (CTK 12.x for Pascal), Python >= 3.10, user-supplied SMB ROM (never distributed).