Matrix compute benchmarks

Correctness-gated Matrix throughput through the public OA operation path, with exact workload and hardware boundaries.

Correctness gatedCurrent · Intel Iris XeHistorical · RTX 5090

Matrix controlled workload

The checked tutorial calls oa::FnMatrix::matMulNt and accepts the runtime-selected route. Every row passes an independent CPU FP32 reference before timing is reported. The current reference is a Release run on Intel Iris Xe Graphics, Tiger Lake GT2, Vulkan 1.4, using the verified FP32 route.

  • One warm-up process followed by the recorded pass.
  • Median synchronized wall time is the primary result; p95 exposes variance.
  • GFLOP/s uses 2 · M · N · K / p50 wall time.
  • Allocation, recording, submission, GPU work, and synchronization remain visible.

Public-operation throughput

ShapeMNKp50 msp95 msGFLOP/s
square-5125125125120.7090.877378.8
square-10241024102410244.9015.967438.2
square-204820482048204841.61547.522412.8
tall-skinny409612810242.6964.354398.3
short-wide128409610242.6902.778399.1
gemv-decode1409640965.0515.8796.6

Large square and projection shapes sustain roughly 379–438 GFLOP/s through the synchronized public path. Single-row decode falls into a GEMV-like regime and needs a dedicated route; it is not evidence for changing the square-GEMM tile.

Model-relevant projections

ShapeMNKp50 msp95 msGFLOP/s
nlp-qkv102432320.0760.25327.4
nlp-ffn-up102464320.0700.09259.7
nlp-ffn-down102432640.0780.08853.8
alm-qkv40963843842.9113.789414.9
alm-ffn-up4096153638412.31013.751392.5
alm-ffn-down4096384153613.34618.112362.0

Small NLP projections remain dominated by fixed dispatch costs. Larger Alm projections approach the large-GEMM regime, so fusion and submission work matter most for the former while kernel efficiency matters more for the latter.

Historical RTX 5090 training comparison

The recovered v0.6.35 snapshot measured a two-layer Fashion-MNIST MLP on an NVIDIA GeForce RTX 5090 Laptop GPU: 784 → 128 ReLU → 10, 101,770 parameters, batch 64, AdamW, and disabled presentation. OA used Vulkan 1.4.329 on NVIDIA driver 595.58.03. The comparison was recorded on 2026-06-03.

FieldHistorical contract
OA workload5 Fashion-MNIST epochs; 4,686 submitted training steps
OA forward pathFP16 W1 through NV cooperative-matrix2; BF16 W2 through KHR cooperative matrix; FP32 accumulation
Vendor comparatorcublasGemmEx with FP32 input/output storage and selectable FP32, TF32, BF16, or FP16 compute
Comparator run20 warmups followed by 2,000 measured steps; same model shape and batch size
TimingGPU timestamp throughput and complete wall throughput reported separately
RuntimeCompute precisionStepsGPU sample/sWall sample/sAccuracy
OA API1 moduleFP16 + BF164,6861,257,071906,83886.40%
OA API2 functionFP16 + BF164,6861,257,862910,24086.70%
cuBLAS 1:1FP322,0201,065,819664,53284.44%
cuBLAS 1:1TF322,0201,201,095712,34884.72%
cuBLAS 1:1 · matchedBF162,0201,194,267717,85884.59%
cuBLAS 1:1FP162,0201,206,289726,73184.40%
CUDA fused · carried forwardHistorical2,000412,411309,95786.21%
PyTorch CUDA · carried forwardHistorical2,000104,45485.81%

The precision-matched headline is OA API1 at 1.257M GPU sample/s versus cuBLAS BF16 at 1.194M: +5.3% for OA in device time. Complete wall throughput was 906.8K versus 717.9K sample/s, a +26.3% result in this harness. The nearby TF32 and FP16 cuBLAS rows show that the vendor path also occupied the 1.2M GPU sample/s tier; the older FP32-only comparison is not the appropriate headline.

This is historical evidence, not a current-package result. OA and cuBLAS used the same shape and batch, but not the same number of optimizer steps, and OA's mixed FP16/BF16 route is not numerically identical to all-BF16 compute. Accuracy therefore remains a convergence gate, not a direct quality ranking. The CUDA-fused and PyTorch rows were inherited from the preceding v0.6.34/v0.6.33 harnesses rather than rerun for v0.6.35.

Evidence boundary

These numbers are a dated hardware and driver snapshot, not a universal performance claim. The recovered RTX 5090 training result remains separate from the current Matrix tables: it measures an end-to-end MLP with older kernels and a different timing method. Older RTX Matrix tables remain excluded because their batch GFLOP/s normalization was incorrect. New hardware replaces the current Matrix baseline only after the same correctness and fresh-process protocol is rerun.

Read the matrix multiplication tutorial for the operation contract, validation formula, replay modes, and refresh procedure.

C++ terminal

cmake --build build/release --target TutorialCoreMatMulIntro -j
./bin/release/sdk/tutorials/core/tuCoreMatMulIntro
# Optional exhaustive CSV grid
OA_AUTOTUNE_BENCH=1 ./bin/release/sdk/tutorials/core/tuCoreMatMulIntro