macuda RTX 5090 · Apple Silicon
Performance report · 19 September 2026

Measured performance across nine AI models

Six language models and three image models, measured on macuda and compared with the same RTX 5090 connected to a Windows PC. The language-model batch ran at 21:07–21:11; image and speculative results come from the earlier 18:12–18:16 batch. Additional serving tests are reported separately.

CardRTX 5090 (GB202) in an AORUS AI BOX over Thunderbolt, on an Apple Silicon Mac
Language-model buildlibtinynv + libtinycudart, build abd0458, defaults; CUDA graphs on, device-to-device copies by kernel, ggml-cuda host halves at -O2
Settingsllama-bench -ngl 99 -p 256 -n 128 -r 3, matching the reference settings
Native referenceSame card in a Windows PC, driver 595.79, llama.cpp b10970, byte-identical models (14 Sep)
Host loadLoad average 5.9–8.7 on a shared Mac; decode throughput varies by a few percent with host load
Validation450/450 operator checks at three chain depths, byte-identical greedy text and PNG outputs, and a five-minute server soak on 19 September

Text generation and prompt processing

Decode generates the response one token at a time. Prefill processes the input prompt. Throughput is measured in tokens per second (tok/s); higher is better. Here, “native” means the Windows reference.

ModelSizetg128 tok/snativeDecode vs nativepp256 tok/snativePrefill vs native
Llama 3.1 8B InstructQ8_0 · dense7.95 GiB161.0 ± 1.0164.5
98%
8,927 ± 34911,11880%
Nemotron Nano 9B v2Q6_K · Mamba-hybrid (SSM)8.50 GiB141.5 ± 0.9140.6
101%
6,894 ± 1754,031171%
Gemma 4 12B itQ4_K_M · dense6.86 GiB133.4 ± 1.0136.4
98%
5,617 ± 2074,169135%
Gemma 4 26B-A4B itQ4_K_XL (QAT) · MoE13.26 GiB225.5 ± 6.5227.8
99%
7,063 ± 2075,478129%
Qwen3.8 27BUD-Q4_K_M · dense15.32 GiB73.4 ± 0.175.3
97%
2,592 ± 692,447106%
Qwen3.5 35B-A3BQ4_K_M · MoE19.71 GiB223.0 ± 1.9245.0
91%
5,250 ± 2094,726111%

tg128 measures generation of 128 tokens; pp256 measures processing of a 256-token prompt. Values are the mean ± standard deviation of three repeats. Percentages are calculated from the displayed means and rounded to the nearest whole percent. The native prefill measurements have substantial variance (±2,771 tok/s for Gemma 12B and ±1,979 for Llama 8B), so those ratios should be interpreted cautiously.

050100150200250 tok/s Llama 3.1 8B Q8_0161.0 Nemotron Nano 9B Q6_K141.5 Gemma 4 12B Q4_K_M133.4 Gemma 4 26B-A4B Q4_K_XL225.5 Qwen3.8 27B Q4_K_M73.4 Qwen3.5 35B-A3B Q4_K_M223.0
Windows reference · driver 595.79macuda · 19 September 2026

Speculative decoding with a multi-token prediction head

A multi-token prediction (MTP) head proposes draft tokens for the main model to verify. Throughput depends on how many of those proposals are accepted.

RunTokensDraft depthAcceptedtok/sNote
Qwen3.8 27B + MTP headUD-Q4_K_M + mtp Q4_0 · draft-mtp~258428–38%86–102llama-speculative-simple, the reference's Thunderbolt prompt, three runs: 101.7, 87.6 and 86.5 tok/s at 37.6%, 28.6% and 28.0% acceptance. Acceptance varies between runs, which affects throughput. Server results are reported separately below.

Greedy, 256 tokens, the same prompt on both sides. The reference record's own attempt at this exact test did not run (the Windows build lacked the binary); its llama-server MTP figures were 114–153 tok/s by prompt type at 44–62% acceptance. macuda's server soak recorded 120–125 tok/s with the same head. These are different test configurations, so they do not establish a direct speedup.

Image generation

Measured at 18:12–18:16 on build 05d8b4a. These timings are reported separately from the later language-model batch.

ModelSettingsTotalSamplingNative totalNative samplingOutput
SDXL Turbofp16512², 4 steps, cfg 1.02.78 s1.55 s4.11 s2.45 sPNG matches validation output byte for byte
Stable Diffusion 1.5emaonly, fp32512², 20 steps, cfg 73.71 s3.16 s3.86 s3.18 sPNG matches validation output byte for byte
Z-Image TurboQ8 DiT + Qwen3-4B encoder + FLUX VAE1024², 8 steps, cfg 1.010.06 s8.41 s9.46 s7.18 sPNG matches validation output byte for byte; text encoding 0.95 s, VAE decode 0.69 s. The initial run took 16.7 s with a cold encoder and VAE; the reported value is a warm rerun.

All runs use seed 42 and the reference prompt. Total time is stable-diffusion.cpp's generate_image duration; sampling measures only the diffusion loop. The Windows reference log records thermal throttling, which affects the comparison. PNG files from this batch match the project's earlier validation outputs from 19 September byte for byte; this is a check across macuda builds.

Images generated on the RTX 5090 from the Mac, resized and converted to JPEG for the website. Output comparisons were performed on the original PNG files.

Interpreting the results

Five models reach 97–101% of reference decode throughput; Qwen3.5 35B-A3B reaches 91%. An earlier Nemotron Nano optimisation replaced copy-queue transfers with copy kernels, allowing transfers to remain in the launch chain. That experiment improved throughput from 111 to 143 tok/s; the batch above records 141.5 tok/s. Profiling attributes the remaining Qwen MoE gap to idle time between chains and approximately 1.7 µs of driver overhead per launch.

The Windows reference was measured on 14 September; this macuda batch was measured on 19 September. Both used the same GPU in the same AORUS enclosure over Thunderbolt at PCIe Gen 4 ×4. The reference ran llama.cpp b10970; macuda used b10950 plus one commit. The project's source comparison found that the intervening ggml-cuda change affected AMD code paths only.

These results compare complete host-and-driver configurations. They do not isolate driver overhead from host load, thermal behaviour or run-to-run variance. Performance claims about individual macuda changes use interleaved A/B measurements on the same Mac; this table is a dated comparison with the Windows reference.

Beyond the batch

Additional serving and split-inference results from separate runs. Conditions and available dates are listed below.

WorkloadThis stackReferenceConditions
27B + MTP head, servedllama-server, single stream, greedy 124 tok/s124.7 First request; 112 tok/s mean over a 62-minute soak with every greedy probe byte-identical.
27B + MTP, eight slotsllama-server, temp 0.6 ~207 tok/s Aggregate across eight concurrent slots. Twenty-minute soaks: 440 requests, 0 errors.
Qwen3-Coder-Next 80B-A3B prefill49.6 GB model, 23,692-token prompt · 16 Sep 15.2 s
1,558 tok/s
35.7 s
664 tok/s
Disaggregated: the model does not fit the card's 32 GB, so experts stream across the link once per processing microbatch, the card prefills, the 662 MB slot state is saved in 0.7 s and restored into a Metal server in 0.1 s, and Apple's own GPU decodes at 54 tok/s. The reference column here is Metal alone on the same Mac.

Validation methodology

The project uses the following checks to validate builds and evaluate performance changes:

The companion page, Architecture, explains how the implementation behind these results, the remaining performance constraints and the corrections documented during development.