← all results

GPU benchmark results

How to read

1.02x
this case's median divided by the baseline median. Below 1.00x is faster, above is slower. We never average cases: a 32x32 batched matmul and a 3072 matmul are different workloads.
baseline
PyTorch wherever the suite measured it; otherwise the case's declared reference arm. The dashed line is that baseline at 1.00x.
bars
tenferro eager (blue) and trace (purple) are filled; PyTorch, JAX and cuTENSOR bars are outlined white so the reference arms stay quiet.
whisker
estimated 95% CI of the median from the case's measured runs (IQR and sample count). A difference smaller than the whisker is not established by this run.
regimes
compute/bandwidth-bound results and latency/overhead results are on separate pages and are never mixed. A small workload is not evidence of slow compute.

Compute- and bandwidth-bound GPU cases only. Per-call latency results are on the latency page.

NVIDIA A100

NVIDIA A100nvidia-gpuhardware: NVIDIA A100 80GB PCIedate: 2026-10-27 01:23:06Ztenferro: 06ac2475a286
gpu/dense 10 cases

baseline PyTorch · best first · 10 cases · case table, absolute times and raw report →

bar = case median / PyTorch median · dashed line = baseline (1.00x) · log scale · shorter (left) is faster · whisker = estimated 95% CIdense_solve_f64_2048_rhs16eager 1.00xtrace 1.02xdense_solve_f64_4096_rhs16eager 1.00xtrace 1.01xdense_svd_f64_256eager 1.00xtrace 1.00xdense_matmul_f64_3072eager 1.01xtrace 1.04xdense_eigh_f64_1024eager 1.01xtrace 1.01xdense_batched_matmul_f64_b1024_256eager 1.02xtrace 1.04xdense_solve_f64_1024_rhs16eager 1.02xtrace 1.07xdense_qr_f64_1536eager 1.02xtrace 1.02xdense_solve_f64_2048_rhs128eager 1.03xtrace 1.05xdense_solve_f64_512_rhs16eager 1.07xtrace 1.24x
gpu/einsum 1 case

baseline PyTorch · best first · 1 case · case table, absolute times and raw report →

bar = case median / PyTorch median · dashed line = baseline (1.00x) · log scale · shorter (left) is faster · whisker = estimated 95% CIeinsum_bin_matmul_3072_f64eager 1.00xtrace 1.02x
gpu/elementwise 1 case · 1 flagged

baseline PyTorch · best first · 1 case · case table, absolute times and raw report →

bar = case median / PyTorch median · dashed line = baseline (1.00x) · log scale · shorter (left) is faster · whisker = estimated 95% CIelementwise_chain_f64_1meager 1.10xtrace 0.50xJAX 0.30x
gpu/linalg_jvp_vjp 20 cases

baseline PyTorch · best first · 20 cases · case table, absolute times and raw report →

bar = case median / PyTorch median · dashed line = baseline (1.00x) · log scale · shorter (left) is faster · whisker = estimated 95% CIlinalg_ad_large_grad_sum_solve_vjp_f64_512trace 0.67xJAX 0.50xlinalg_ad_large_grad_sum_solve_vjp_f64_256trace 0.76xJAX 0.42xlinalg_ad_large_grad_sum_lu_jvp_f64_512trace 0.86xJAX 0.83xlinalg_ad_large_grad_sum_svd_s_vjp_f64_256trace 0.95xJAX 0.93xlinalg_ad_large_grad_sum_svd_s_jvp_f64_256trace 0.95xJAX 0.94xlinalg_ad_large_grad_sum_svd_s_vjp_f64_512trace 0.97xJAX 0.97xlinalg_ad_large_grad_sum_svd_s_jvp_f64_512trace 0.97xJAX 0.97xlinalg_ad_large_grad_sum_eigh_vjp_f64_256trace 0.98xJAX 0.94xlinalg_ad_large_grad_sum_eigh_vjp_f64_512trace 0.98xJAX 0.98xlinalg_ad_large_grad_sum_eigh_jvp_f64_512trace 1.01xJAX 1.01xlinalg_ad_large_grad_sum_eigh_jvp_f64_256trace 1.02xJAX 1.02xlinalg_ad_large_grad_sum_lu_jvp_f64_256trace 1.09xJAX 0.74xlinalg_ad_large_grad_sum_qr_jvp_f64_512trace 1.11xJAX 1.02xlinalg_ad_large_grad_sum_qr_vjp_f64_512trace 1.14xJAX 1.07xlinalg_ad_large_grad_sum_lu_vjp_f64_512trace 1.27xJAX 1.08xlinalg_ad_large_grad_sum_solve_jvp_f64_512trace 1.29xJAX 0.93xlinalg_ad_large_grad_sum_lu_vjp_f64_256trace 1.31xJAX 0.94xlinalg_ad_large_grad_sum_qr_jvp_f64_256trace 1.41xJAX 0.98xlinalg_ad_large_grad_sum_qr_vjp_f64_256trace 1.47xJAX 1.02xlinalg_ad_large_grad_sum_solve_jvp_f64_256trace 1.53xJAX 0.78x
gpu/permutation 10 cases

baseline PyTorch · best first · 10 cases · case table, absolute times and raw report →

bar = case median / PyTorch median · dashed line = baseline (1.00x) · log scale · shorter (left) is faster · whisker = estimated 95% CIreverse_23d_128x2transpose 0.17xto_contiguous 0.18xcopy_into 0.17xcuTENSOR 0.17xtranspose_3d_1024_1024_512_201transpose 0.20xto_contiguous 0.25xcopy_into 0.19xcuTENSOR 0.19xreverse_18d_3transpose 0.26xto_contiguous 0.26xcopy_into 0.26xcuTENSOR 0.26xtranspose_2d_32768_16384transpose 0.27xto_contiguous 0.34xcopy_into 0.27xcuTENSOR 0.27xtranspose_3d_1024_1024_512_102transpose 0.71xto_contiguous 0.72xcopy_into 0.70xcuTENSOR 0.70xcyclic_18d_3transpose 0.86xto_contiguous 0.86xcopy_into 0.86xcuTENSOR 0.84xrotation_6d_64_32_32_32_16_16transpose 0.91xto_contiguous 0.94xcopy_into 0.90xcuTENSOR 0.90xtn_light_415_24d_scattered_to_colmajor_gputo_contiguous 1.04xcuTENSOR 1.02xtn_light_415_24d_contiguous_same_perm_gputranspose 1.06xto_contiguous 1.07xcopy_into 1.06xcuTENSOR 1.05x
Cases without a comparable baseline (1)

memcpy_24d_64x2

gpu/sparse 2 cases

baseline PyTorch · best first · 2 cases · case table, absolute times and raw report →

Cases without a comparable baseline (2)

sparse_synthetic_4m_64m_spmv_f64, sparse_synthetic_64k_4m_spmm_f64_rhs1024

gpu/tensornetwork 1 case

baseline PyTorch · best first · 1 case · case table, absolute times and raw report →

bar = case median / PyTorch median · dashed line = baseline (1.00x) · log scale · shorter (left) is faster · whisker = estimated 95% CItensornetwork_permutation_optimized_f32eager 0.46xtrace 0.45x
Diagnostic reports (24)

nvidia-gpu