aboutsummaryrefslogtreecommitdiff
path: root/NX2_GPU_THREAD_SPLIT.md
diff options
context:
space:
mode:
authorTakoroka <137927095+Takoroka@users.noreply.github.com>2026-10-29 11:18:19 -0400
committerTakoroka <137927095+Takoroka@users.noreply.github.com>2026-10-29 20:49:48 -0400
commit17c10c3690eab1ab461318f7e3e8850d490fb753 (patch)
tree5fade1276a4cc07d62612c987eac016d732d158d /NX2_GPU_THREAD_SPLIT.md
parent7a251d3a92f870649dab6068007ca3a1c910bbb5 (diff)
nx2: notes 142-144 (GPU thread split, scheduler race, front register copies)
Diffstat (limited to 'NX2_GPU_THREAD_SPLIT.md')
-rw-r--r--NX2_GPU_THREAD_SPLIT.md11
1 files changed, 10 insertions, 1 deletions
diff --git a/NX2_GPU_THREAD_SPLIT.md b/NX2_GPU_THREAD_SPLIT.md
index f739704dbf..2807b930dc 100644
--- a/NX2_GPU_THREAD_SPLIT.md
+++ b/NX2_GPU_THREAD_SPLIT.md
@@ -1,4 +1,4 @@
-# Splitting the GPU thread (design, not implemented yet)
+# Splitting the GPU thread
Title 1 (Mario Kart World) is bound by one host thread, the GPU thread: ~100% busy while the
host GPU is 20-40% busy and the game's own CPU thread mostly polls the counter. Per second of
@@ -51,3 +51,12 @@ heavy courses needs work on more than one core.
3. Move macros to the front with the register mirrors; verify mirrors against the back's
registers in a debug mode (compare on every MME_READ).
4. Sync points; crash and screenshot tests across courses; then title 4.
+
+## Status (2026-10-29)
+
+Stages 1-3 are in (babd395, `gpu_split.h`), off by default: `EDEN_NX2_SPLIT=1` runs engine methods
+on the back, `EDEN_NX2_SPLIT=2` also runs the 3D and compute macros on the front against register
+copies. Measured in title 1 (NX2_NOTES rows 142-144): ~44,000 draws a second on one thread, ~47,400
+with stage 2, 50,000-66,500 with stage 3. The front waits ~4,000-5,000 times a second (semaphore
+acquires, MME DMA reads); the back still spends ~200 ms a second outside its zones (ring dispatch,
+method sink). Next: a clean A/B for the default, then trimming the back's ring overhead.