Large-matrix comparisons: 2000 × 2000 · 1 thread(s) · 2000 × 2000 · 4 thread(s)

Benchmark results — 2026-10-18-latest

286 measured cases across 11 libraries. Open interactive charts. Tables show mean ± JMH 99.9% confidence half-width in ms/op.

Corrected harness: deferred ojAlgo results are materialized inside timing, native inputs are checked for mutation, and every fork validates repeat execution. These short iterations provide a diagnostic baseline; use longer runs on dedicated hardware for fine rankings. See the fairness audit.

Environment

AMD EPYC 9V74 80-Core Processor; Linux-6.18.55-x86_64-with-glibc2.39. Visible CPUs: 9; container CPU quota: 800000 100000. JVM 17.0.20. No exclusive CPU reservation; any requested affinity is recorded below.

2 JVM forks per case; 2 warmup iterations of 200 ms; 3 measurement iterations of 200 ms. One JMH worker. The fork options fix a 1 GiB heap. Requested computational threads: 1; requested CPU affinity: 0. Affinity does not reserve a CPU exclusively.

Native thread environment variables request the recorded computational thread count. Parallel Colt, ojAlgo and UJMP also receive explicit library thread limits; MTJ uses an explicitly forced pure-Java F2J backend. Native jblas thread counts are not independently audited. See the environment and backend records below.

64 × 64 matrices

Operation NMDEV EJML COMMONS JAMA COLT PARALLEL_COLT JBLAS F2J_LAPACK MTJ OJALGO UJMP
transpose 0.0049969 ± 0.0027 0.0037877 ± 0.00049 0.0048181 ± 0.00033 0.0048515 ± 0.00055 0.0039089 ± 0.0012 0.0040052 ± 0.00081 0.0045269 ± 0.00047 0.0053157 ± 0.0011 0.0092013 ± 0.00023 0.0054774 ± 0.00037 0.026133 ± 0.0014
addition 0.0026649 ± 0.0004 0.0025546 ± 0.00059 0.0043319 ± 0.00056 0.0038018 ± 0.00086 0.0048006 ± 0.0015 0.0046299 ± 0.00052 0.0026406 ± 0.00047 0.012708 ± 0.0026 0.016702 ± 0.00093 0.0028769 ± 0.00036 0.0065925 ± 0.00018
scale 0.002261 ± 0.00025 0.0022725 ± 0.00016 0.0041443 ± 0.00056 0.0034708 ± 0.00087 0.0035058 ± 0.00056 0.0044676 ± 0.0017 0.0022613 ± 0.00036 0.0021555 ± 0.00017 0.014451 ± 0.0012 0.003515 ± 0.0006 0.0060943 ± 0.0029
multiplication 0.23289 ± 0.33 0.11645 ± 0.029 0.16178 ± 0.022 0.15752 ± 0.013 0.21307 ± 0.035 0.16411 ± 0.049 0.03451 ± 0.0015 0.1572 ± 0.017 0.16832 ± 0.0073 0.13059 ± 0.035 0.16248 ± 0.012
determinant 0.043506 ± 0.029 0.053017 ± 0.019 0.061098 ± 0.016 0.05098 ± 0.017 0.095894 ± 0.038 0.16728 ± 0.027 0.038451 ± 0.009 0.041536 ± 0.0087 0.050396 ± 0.0087 0.02246 ± 0.0014 0.051671 ± 0.011
inverse 0.61886 ± 0.6 0.23927 ± 0.014 0.11436 ± 0.031 0.20695 ± 0.036 0.45362 ± 0.63 0.59985 ± 0.62 0.066908 ± 0.011 0.1472 ± 0.039 0.24405 ± 0.031 0.16916 ± 0.097 0.20129 ± 0.042
inverseSPD 0.45822 ± 0.19 0.11917 ± 0.021 0.088304 ± 0.018 0.28834 ± 0.02 0.39078 ± 0.11 0.56926 ± 0.15 0.052438 ± 0.0047 0.097737 ± 0.0052 0.3084 ± 0.037 0.09046 ± 0.028 0.27572 ± 0.069
cholesky 0.034209 ± 0.011 0.032664 ± 0.0064 0.04192 ± 0.0074 0.029048 ± 0.00097 0.037755 ± 0.0045 0.15222 ± 0.016 0.01968 ± 0.00044 0.027985 ± 0.00089 0.088371 ± 0.04 0.023903 ± 0.00055 0.034387 ± 0.0083
lu 0.043119 ± 0.014 0.063024 ± 0.019 0.066356 ± 0.01 0.065742 ± 0.022 0.095492 ± 0.036 0.1886 ± 0.054 0.044123 ± 0.0066 0.047303 ± 0.0085 0.052307 ± 0.013 0.043144 ± 0.018 0.063829 ± 0.019
qr 0.35601 ± 0.27 0.1796 ± 0.037 0.2125 ± 0.034 0.37344 ± 0.14 0.42 ± 0.09 0.90087 ± 0.67 0.14991 ± 0.095 0.21266 ± 0.056 0.22318 ± 0.046 0.33671 ± 0.26 0.35055 ± 0.031
eigenSymmetric 5.0916 ± 1.7 0.59458 ± 0.11 0.96193 ± 0.98 0.62406 ± 0.084 0.64549 ± 0.061 0.81789 ± 0.84 0.41615 ± 0.02 1.4016 ± 1.9 2.777 ± 2.7 0.32563 ± 0.036 0.7974 ± 0.79
svd 7.3479 ± 8.2 1.1691 ± 0.22 49.761 ± 1.3e+02 35.454 ± 1.3e+02 17.736 ± 28 13.253 ± 6.8 1.0731 ± 0.079 3.6912 ± 0.5 10.893 ± 5.5 2.0278 ± 1.8 6.3974 ± 7.4
solve 0.19751 ± 0.21 0.062414 ± 0.034 0.065432 ± 0.015 0.069237 ± 0.028 0.25246 ± 0.37 0.43782 ± 0.58 0.025231 ± 0.0026 0.050872 ± 0.019 0.050904 ± 0.028 0.040367 ± 0.044 0.067532 ± 0.021

Inspect this matrix size on the interactive charts

NM Dev is 1×. Below 1× means less time than NM Dev; above 1× means more time. Logarithmic scale. Use the interactive HTML for exact point details.

256 × 256 matrices

Operation NMDEV EJML COMMONS JAMA COLT PARALLEL_COLT JBLAS F2J_LAPACK MTJ OJALGO UJMP
transpose 0.22752 ± 0.071 0.18684 ± 0.025 0.091172 ± 0.0086 0.086321 ± 0.01 0.15934 ± 0.027 0.15185 ± 0.0093 0.16652 ± 0.012 0.17133 ± 0.085 0.17122 ± 0.021 0.13176 ± 0.023 0.5222 ± 0.014
addition 0.078467 ± 0.04 0.050052 ± 0.015 0.058084 ± 0.013 0.051887 ± 0.012 0.11841 ± 0.083 0.08571 ± 0.012 0.044675 ± 0.0067 0.18672 ± 0.087 0.26965 ± 0.017 0.057062 ± 0.026 0.23133 ± 0.028
scale 0.062967 ± 0.05 0.041409 ± 0.0059 0.048188 ± 0.0055 0.043734 ± 0.0066 0.060238 ± 0.011 0.068384 ± 0.0078 0.040034 ± 0.01 0.039423 ± 0.0089 0.26541 ± 0.021 0.056076 ± 0.03 0.21495 ± 0.018
multiplication 18.147 ± 1.1 5.8074 ± 0.81 15.257 ± 3.8 12.832 ± 1.3 35.42 ± 2.3 33.22 ± 2.9 2.1267 ± 0.099 8.7855 ± 0.28 8.7309 ± 0.29 5.8832 ± 0.84 15.933 ± 0.54
determinant 3.897 ± 3 3.8628 ± 0.23 4.3293 ± 0.66 3.8676 ± 0.5 3.6275 ± 1.1 8.754 ± 1.4 1.1214 ± 0.053 3.5893 ± 0.23 4.027 ± 0.81 1.4921 ± 0.35 3.8829 ± 0.44
inverse 23.677 ± 6.5 14.54 ± 3.8 7.2961 ± 0.65 12.813 ± 1.9 17.864 ± 8.2 30.659 ± 34 2.9067 ± 0.79 12.468 ± 3.7 12.435 ± 4.1 9.1774 ± 0.13 12.289 ± 0.85
inverseSPD 19.684 ± 7 10.107 ± 0.74 4.2142 ± 0.96 25.221 ± 2.9 33.637 ± 0.66 15.617 ± 3.4 2.4429 ± 0.32 5.8945 ± 0.92 14.219 ± 1.1 5.2714 ± 0.29 26.124 ± 0.93
cholesky 2.1024 ± 0.55 1.8778 ± 0.4 1.6499 ± 0.22 2.1882 ± 0.37 1.6997 ± 0.12 2.7405 ± 0.49 0.56816 ± 0.1 1.9902 ± 0.31 3.0793 ± 0.9 1.1261 ± 0.35 2.071 ± 0.55
lu 4.7155 ± 6.4 4.0409 ± 0.79 4.6993 ± 0.58 3.858 ± 0.39 3.8086 ± 0.54 11.355 ± 7.8 1.2959 ± 0.13 4.1396 ± 0.83 4.1047 ± 1.3 1.909 ± 0.31 3.9513 ± 0.92
qr 44.715 ± 70 10.651 ± 0.56 12.593 ± 1.6 38.494 ± 1.4 100.76 ± 3.3 24.409 ± 6 6.199 ± 1 15.391 ± 1 15.687 ± 1.4 5.2878 ± 1.1 38.744 ± 1.5
eigenSymmetric 93.719 ± 35 25.275 ± 0.33 46.059 ± 2.8 49.347 ± 8.1 50.752 ± 14 46.905 ± 1.2 9.7716 ± 1.3 43.125 ± 39 56.62 ± 22 11.849 ± 2 49.506 ± 5
svd 114.51 ± 42 52.69 ± 8 144.57 ± 7.7 168.98 ± 1.4e+02 220.99 ± 2.7e+02 136.91 ± 29 117.15 ± 16 250.34 ± 86 135.76 ± 43 65.836 ± 54 196.42 ± 2.4e+02
solve 4.2655 ± 2.9 4.3439 ± 0.46 4.6684 ± 1 4.1434 ± 0.95 5.0097 ± 5.1 12.282 ± 8.1 0.8208 ± 0.19 3.8312 ± 0.34 3.7813 ± 0.12 1.6474 ± 0.19 3.9884 ± 0.45

Inspect this matrix size on the interactive charts

NM Dev is 1×. Below 1× means less time than NM Dev; above 1× means more time. Logarithmic scale. Use the interactive HTML for exact point details.

Limits

No aggregate speedup is reported because averaging operation ratios imposes an arbitrary workload weighting. This run uses one deterministic family of well-conditioned square matrices. It does not measure sparse matrices, conic optimization, parallel scaling, very large inputs or stability on difficult problems. Parameter order is deterministic, and the VM is shared. Reproduce your own workload on dedicated hardware before making broad performance claims.

Raw evidence

Regenerate with python3 benchmark/scripts/report.py benchmark/results/2026-10-18-latest. Python only summarizes measurements and renders charts; all measured calculations run in Java/JMH. Matplotlib is required to regenerate charts and the self-contained HTML.