Eigen vs. BLAS/LAPACK libraries, Apple M4 with NEON (September 2026)

Single-threaded BLAS (AXPY, DOT, GEMV, GEMM, TRSM, SYRK) and LAPACK (POTRF, GETRF, GEQRF, SYEV, GESDD, GEEV): Eigen master built for NEON alone against OpenBLAS on an Apple M4 Mac mini.

The cells of the Apple M4 SME page measured again on the same machine with Eigen compiled for NEON alone, the default for this platform, against OpenBLAS: what the comparison looks like without the SME unit.

Apple Accelerate and Arm Performance Libraries are not on this page: neither can be held to NEON through documented means. For the comparison with them, see the SME page.

Conditions

CPU Apple M4 (Mac mini, Mac16,10), 4 performance and 6 efficiency cores; performance cores: L1d 128 KiB, L2 16 MiB shared by the four; efficiency cores: L1d 64 KiB, L2 4 MiB shared by the six; 24 GiB unified memory; SME2 with a 512-bit streaming vector length and FEAT_SME_F64F64, no non-streaming SVE
OS macOS 27.0 (build 26A428), Darwin 27.0.0
Compiler Apple clang 21.0.0 (clang-2100.3.34.2), -O3 -DNDEBUG for the default arm64 target, no -mcpu, C++17
Eigen master 46a2d0c56 (5.0.1-dev), default configuration, no external BLAS. Without -mcpu=apple-m4 the compiler does not define __ARM_FEATURE_SME2, so every Eigen kernel is the NEON code
OpenBLAS 0.3.34 (Homebrew bottle, DYNAMIC_ARCH, OpenMP build), kernel target vortexm4, unchanged from the SME page and not measured again: its rates are those of that page’s session
Interface the library is called through the Fortran BLAS and LAPACK symbols (dgemm_, dpotrf_, …) with column-major operands
Threads 1 for every arm: OPENBLAS_NUM_THREADS and OMP_NUM_THREADS set to 1; Eigen built without OpenMP
Method Google Benchmark 1.9.5, 10 repetitions of at least 0.2 s each per cell, median of the 10 rates. macOS has no interface for binding a thread to a core, so the process is not pinned
Date Eigen: 2026-09-20 (24 runs, about 2.0 hours of measurement). OpenBLAS: 2026-09-19, the SME page’s session
Harness benchmarks/comparison/run.py --isa aarch64-neon from Eigen merge request !2903, machine profile apple-m4-mac-mini

GEMM at n = 1024 ran at 61 GFLOP/s in double and 124 in float in Eigen, against 57 and 114 for OpenBLAS.

How to read the numbers. Every rate is nominal GFLOP/s: the textbook operation count of the operation, stated in each section below, divided by the median wall time of one call. Both arms of a comparison are built into the same binary and run on the same freshly randomized operands, and the reference library’s result is validated against Eigen’s before it is timed. Eigen was measured twice, in two binaries of the same build, those linked against OpenBLAS and Accelerate, where only the Eigen cells ran. The Eigen line on each chart is the median of the two passes and the shaded band is their spread, the run-to-run noise on this host: within 3 % for 94 % of the cells and above 10 % for 2 %. The widest spreads are binary-dependent rather than noise: GEQRF in double between n = 32 and 96 runs 16 to 27 % slower in one of the two binaries than in the other (9.4 against 12.8 GFLOP/s at n = 48).

A ratio divides that median by OpenBLAS’s rate from the SME page’s session the evening before, since the library does not change with Eigen’s build. Eigen’s AXPY, DOT and GEMV are the same NEON kernels in both builds and bound the drift between the two sessions: they repeat their rates within 0.1 % at the median cell and within 1 % for 92 % of the cells.

Each run covered one operation in one binary. A run started only once the machine had been idle (other processes using less than 0.35 of a core over two 5 s windows) with no thermal or performance warning from pmset, and was discarded and repeated if the whole machine averaged 1.35 busy cores or more during it, or reached 2.0 in any 5 s window; none of the 24 runs had to be repeated. Spotlight indexing was switched off for the session.

The dotted vertical lines on the charts mark the sizes at which the operands of the call, inputs and outputs together, fill a performance core’s L1 data cache (128 KiB) and the L2 cache that the four performance cores share (16 MiB); the M4 has no L3.

For the eigenvalue and singular value decompositions the operation count is the one of the classical algorithm, so a divide-and-conquer or blocked implementation is credited with work it does not do; the ratios between arms are unaffected.

AXPY

y += alpha * x against ?axpy, alpha = 0.75; (2n) flops. Lengths run from 2 to (2^{24}) (128 MiB per double vector), through every cache level into DRAM.

Short vectors. Up to about n = 32 the AXPY and DOT rates measure the cost of a call rather than the kernel. Eigen’s expression compiles inline into the calling loop, while a call into a shared library pays a cost of its own before it reads an element. That cost is fixed per call, so the ratios at the small end are ratios of fixed costs. The DOT cells in double at n = 2 show it directly: 0.49 ns per call for Eigen against 12.5 ns for OpenBLAS. Eigen still computes the whole operation on every call; nothing is hoisted out of the timed loop.

AXPY double AXPY float

DOT

x.dot(y) against ?dot; (2n) flops, the same lengths. Real scalars only: the Fortran convention for returning a complex function value is not fixed by the platform ABI and differs between library builds, so ?dotc cannot be declared portably.

Up to about n = 32 the rates measure the cost of a call; see AXPY.

DOT double DOT float

GEMV

y.noalias() += A * x against ?gemv, column-major, no transposition; (2mn) flops.

Square matrices, then the short-fat (n = 10000, m grows) and tall-skinny (m = 10000, n grows) sweeps.

GEMV double, square GEMV double, sweeps GEMV float, square GEMV float, sweeps

GEMM

C.noalias() += A * B against ?gemm, column-major, no transposition; (2mnk) flops.

Square matrices first; then the two tall-skinny sweeps, where m stays at 4096 or 10000 while n = k grows; then the assorted non-square shapes that fit neither.

GEMM double, square GEMM double, tall-skinny sweeps GEMM double, other shapes GEMM float, square GEMM float, tall-skinny sweeps GEMM float, other shapes

TRSM

A.triangularView<Lower>().solveInPlace(X) against ?trsm with the m-by-m lower triangle on the left and n right-hand sides, no transposition, non-unit diagonal; (m(m+1)n) flops. The solve is destructive, so the timed region includes one copy of B for both arms.

Square shapes (m = n), then the sweeps with a fixed triangle of order 1024 or 4096 and a growing number of right-hand sides, then the remaining shapes with 4096 right-hand sides against a small triangle.

TRSM double, square TRSM double, sweeps TRSM double, other shapes TRSM float, square TRSM float, sweeps TRSM float, other shapes

SYRK

C.selfadjointView<Lower>().rankUpdate(A) against ?syrk, lower triangle, no transposition, with C n-by-n and A n-by-k; (n(n+1)k) flops.

Square shapes (n = k), then the sweeps: a 4096-by-4096 matrix updated by a growing number of columns, and the Gram matrix of a short, wide factor with 4096 columns.

SYRK double, square SYRK double, sweeps SYRK float, square SYRK float, sweeps

POTRF

LLT<Ref<MatrixXd>> in place against ?potrf, lower triangle, symmetric positive definite operand; (n^3/3) flops. The timed region includes one copy of the operand for both arms, since the factorization is destructive.

POTRF double POTRF float

GETRF

PartialPivLU<Ref<MatrixXd>> in place against ?getrf, square operand; (2n^3/3) flops. Both arms copy the operand into a destination allocated once and factorize the copy; neither allocates inside the timed region.

GETRF double GETRF float

GEQRF

HouseholderQR<Ref<MatrixXd>> in place against ?geqrf, m ≥ n; (2mn^2 - 2n^3/3) flops, the same copy-then-factorize protocol as GETRF.

Square shapes, then the tall-skinny sweeps with m fixed at 4096, 10000 and 100000.

GEQRF double, square GEQRF double, tall-skinny sweeps GEQRF float, square GEQRF float, tall-skinny sweeps

SYEV

SelfAdjointEigenSolver with eigenvectors against ?syev (jobz = 'V', lower triangle), the like-for-like pair: tridiagonalization followed by implicit QR iteration on both sides; (9n^3) flops, the count of that algorithm (Golub & Van Loan, section 8.3.3). Neither works in place: the solver copies the operand internally and the reference arm pays the same one copy. Sizes to 2048, where a call of SelfAdjointEigenSolver takes 2.9 s in double.

SYEV double SYEV float

GESDD

BDCSVD<MatrixXd, ComputeThinU | ComputeThinV> against ?gesdd with jobz = 'S', divide and conquer on both sides, m ≥ n, the thin U and V computed; (14mn^2 + 8n^3) flops, the Golub-Reinsch count (Golub & Van Loan, table 8.6.1). Square sizes to 2048, then tall-skinny sweeps with m fixed at 4096 and 10000.

GESDD double, square GESDD double, tall-skinny sweeps GESDD float, square GESDD float, tall-skinny sweeps

GEEV

EigenSolver with eigenvectors against ?geev (jobvr = 'V'), a dense random nonsymmetric operand: Hessenberg reduction, QR iteration to the Schur form and back-substitution for the eigenvectors on both sides; (25n^3) flops, the count of the Hessenberg QR algorithm with Schur vectors (Golub & Van Loan, section 7.5.6). Sizes to 1024, where a call of EigenSolver takes 3.5 s in double.

GEEV double GEEV float

Summary

Geometric mean of the Eigen ÷ library rate ratio over the square shapes in each size band. Above 1, Eigen is faster. Only the vector operations reach the last band.

Operation Scalar Library n ≤ 16 24–128 192–1024 1536–16384 > 16384
AXPY float OpenBLAS 4.27 1.83 1.11 1.16 1.15
AXPY double OpenBLAS 4.19 1.36 0.75 0.96 1.04
DOT float OpenBLAS 17.59 7.66 1.67 1.36 1.08
DOT double OpenBLAS 17.35 3.52 1.35 1.33 1.07
GEMV float OpenBLAS 2.76 1.22 1.07 0.94
GEMV double OpenBLAS 4.08 2.38 1.76 1.12
GEMM float OpenBLAS 1.81 1.08 1.09 1.09
GEMM double OpenBLAS 1.45 1.09 1.08 1.09
TRSM float OpenBLAS 2.98 3.44 1.42 1.08
TRSM double OpenBLAS 2.17 1.77 1.07 1.00
SYRK float OpenBLAS 0.67 1.02 1.12 1.09
SYRK double OpenBLAS 0.53 0.96 1.07 1.06
POTRF float OpenBLAS 2.12 1.46 1.14 1.06
POTRF double OpenBLAS 2.26 1.13 1.01 1.04
GETRF float OpenBLAS 1.75 2.20 1.29 1.04
GETRF double OpenBLAS 2.24 1.68 1.03 0.97
GEQRF float OpenBLAS 1.51 1.35 1.13 1.18
GEQRF double OpenBLAS 1.59 1.29 1.02 1.11
SYEV float OpenBLAS 1.29 1.60 2.10 2.27
SYEV double OpenBLAS 1.37 1.64 1.44 1.35
GESDD float OpenBLAS 1.55 1.00 1.66 1.78
GESDD double OpenBLAS 1.46 0.82 1.16 1.10
GEEV float OpenBLAS 2.22 1.15 0.37
GEEV double OpenBLAS 2.02 0.88 0.34

Caveats

  • Accelerate and Arm Performance Libraries are left out because neither can be held to NEON through documented means; the SME page has the comparison with them.
  • The OpenBLAS ratios are formed across two sessions on the same machine, about 9 to 11 hours apart for any one operation; the drift bound above applies to them.
  • macOS cannot bind a thread to a core, so a single-threaded rate is that of whichever core the scheduler chose; a busy foreground thread normally stays on a performance core.
  • The machine is a desktop with a logged-in session and its background services. Runs that they disturbed beyond the limits above were repeated; smaller disturbances remain in the numbers.

Full tables

GFLOP/s per shape and library, with the Eigen ÷ library ratio: Eigen’s median over its two passes against the library’s rate.

AXPY float
n Eigen GFLOP/s OpenBLAS GFLOP/s Eigen ÷ OpenBLAS
2 5.4 1.3 4.02
3 5.4 1.8 2.97
4 12.1 1.9 6.46
6 11.0 2.3 4.70
8 21.5 4.7 4.59
12 24.2 4.9 4.94
16 25.9 8.2 3.15
24 27.7 10.7 2.58
32 18.4 13.0 1.41
48 19.8 12.9 1.53
64 23.6 9.0 2.64
96 27.2 15.7 1.73
100 27.1 15.6 1.74
128 28.0 18.0 1.56
192 29.2 21.1 1.38
256 30.0 23.0 1.30
384 28.6 25.2 1.13
512 27.7 26.5 1.04
768 28.1 28.0 1.00
1000 28.8 28.1 1.02
1001 28.8 28.4 1.01
1024 28.9 28.2 1.02
1536 29.9 29.3 1.02
2048 30.5 29.8 1.02
3072 31.1 30.3 1.03
4096 31.4 16.2 1.93
6144 31.7 30.8 1.03
8192 31.8 21.4 1.49
10000 31.9 31.1 1.03
12288 32.0 30.9 1.04
16384 32.0 29.2 1.09
32768 23.6 19.5 1.21
65536 23.8 19.6 1.21
100000 23.8 19.8 1.20
131072 23.8 19.7 1.21
262144 23.9 19.7 1.21
524288 23.7 19.9 1.19
1000000 20.8 16.9 1.23
1048576 23.6 19.1 1.24
2097152 23.5 19.9 1.18
4194304 18.5 18.4 1.01
8388608 18.4 18.1 1.01
16777216 16.5 16.8 0.98
AXPY double
n Eigen GFLOP/s OpenBLAS GFLOP/s Eigen ÷ OpenBLAS
2 6.0 1.3 4.53
3 7.1 1.9 3.85
4 10.8 1.9 5.73
6 12.1 2.2 5.53
8 12.9 2.9 4.47
12 13.9 3.2 4.37
16 9.3 4.5 2.08
24 9.8 4.5 2.17
32 11.1 9.0 1.23
48 13.6 8.8 1.55
64 14.0 8.7 1.62
96 14.6 13.2 1.11
100 14.7 13.1 1.12
128 15.0 14.7 1.02
192 15.4 16.6 0.93
256 13.8 17.7 0.78
384 14.0 19.1 0.73
512 14.4 20.0 0.72
768 15.0 21.0 0.71
1000 15.2 21.4 0.71
1001 15.3 21.7 0.70
1024 15.2 21.5 0.71
1536 15.5 22.1 0.70
2048 15.7 22.3 0.70
3072 15.9 18.6 0.85
4096 15.9 10.1 1.57
6144 16.0 18.8 0.85
8192 16.0 18.1 0.88
10000 13.1 11.3 1.16
12288 12.1 11.1 1.09
16384 11.8 11.1 1.06
32768 11.9 11.1 1.07
65536 11.9 11.1 1.07
100000 11.9 11.1 1.07
131072 11.9 11.2 1.07
262144 11.8 11.1 1.06
524288 11.8 10.7 1.10
1000000 11.7 11.1 1.05
1048576 11.8 11.1 1.06
2097152 9.2 9.2 1.00
4194304 9.2 9.0 1.02
8388608 8.3 8.4 0.98
16777216 8.0 8.0 1.00
DOT float
n Eigen GFLOP/s OpenBLAS GFLOP/s Eigen ÷ OpenBLAS
2 6.4 0.3 20.51
3 8.1 0.5 17.45
4 11.2 0.6 18.62
6 12.2 0.9 14.05
8 21.7 1.1 19.38
12 32.3 1.6 20.67
16 26.0 1.9 13.89
24 38.8 2.5 15.54
32 46.4 3.0 15.41
48 46.5 3.4 13.70
64 46.8 9.1 5.16
96 45.9 8.5 5.40
100 45.8 8.1 5.67
128 46.6 15.7 2.97
192 46.7 20.4 2.29
256 46.7 23.4 1.99
384 46.7 27.5 1.70
512 46.6 29.9 1.56
768 46.0 32.1 1.43
1000 44.9 27.9 1.61
1001 44.5 27.6 1.61
1024 44.9 33.3 1.35
1536 43.1 34.8 1.24
2048 41.6 14.2 2.93
3072 39.7 36.3 1.09
4096 38.7 20.6 1.88
6144 37.7 24.7 1.53
8192 37.3 26.6 1.40
10000 36.8 36.6 1.00
12288 36.8 37.2 0.99
16384 36.4 36.3 1.00
32768 30.3 25.4 1.19
65536 30.5 26.2 1.16
100000 30.4 27.2 1.12
131072 30.5 26.8 1.14
262144 30.5 27.2 1.12
524288 29.9 27.1 1.10
1000000 26.5 23.7 1.12
1048576 29.3 26.6 1.10
2097152 29.1 26.2 1.11
4194304 20.2 24.2 0.84
8388608 19.2 18.5 1.04
16777216 18.7 18.3 1.02
DOT double
n Eigen GFLOP/s OpenBLAS GFLOP/s Eigen ÷ OpenBLAS
2 8.2 0.3 25.59
3 9.7 0.5 21.08
4 12.9 0.6 21.55
6 16.2 0.9 18.15
8 16.2 1.1 14.42
12 19.4 1.5 12.76
16 22.9 1.9 12.19
24 23.2 2.5 9.32
32 23.4 4.5 5.16
48 22.9 5.4 4.28
64 23.3 7.7 3.02
96 23.3 10.0 2.33
100 23.2 10.1 2.30
128 23.3 11.7 2.00
192 23.3 13.8 1.69
256 23.3 14.8 1.57
384 23.1 16.0 1.45
512 22.6 16.5 1.37
768 21.6 17.2 1.25
1000 20.9 17.5 1.20
1001 20.9 17.4 1.20
1024 20.8 17.6 1.18
1536 19.8 18.0 1.10
2048 19.3 7.0 2.74
3072 18.8 18.4 1.02
4096 18.6 10.2 1.83
6144 18.4 14.7 1.25
8192 18.2 15.2 1.20
10000 16.2 15.2 1.06
12288 15.3 12.9 1.19
16384 15.2 12.7 1.19
32768 15.2 13.1 1.16
65536 15.2 13.4 1.14
100000 15.2 13.7 1.11
131072 15.2 13.6 1.12
262144 14.9 13.6 1.10
524288 14.6 13.3 1.10
1000000 14.6 13.3 1.10
1048576 14.6 13.3 1.10
2097152 9.5 10.2 0.93
4194304 9.4 9.2 1.02
8388608 9.2 9.1 1.01
16777216 9.1 9.1 1.00
GEMV float
m×n Eigen GFLOP/s OpenBLAS GFLOP/s Eigen ÷ OpenBLAS
2x2 1.5 0.4 3.33
3x3 2.7 1.0 2.68
4x4 5.5 1.8 3.13
6x6 10.1 3.6 2.78
8x8 17.9 6.1 2.93
12x12 29.7 11.8 2.52
16x16 40.3 19.0 2.12
24x24 49.7 28.5 1.74
32x32 66.2 37.7 1.76
48x48 58.1 51.0 1.14
64x64 74.1 58.7 1.26
96x96 73.1 69.1 1.06
100x100 57.7 69.3 0.83
128x128 71.6 69.4 1.03
192x192 59.9 46.3 1.29
200x200 57.1 48.5 1.18
256x256 47.2 46.3 1.02
257x257 41.0 40.7 1.01
384x384 44.7 46.0 0.97
500x500 51.0 46.5 1.10
512x512 48.3 46.2 1.05
768x768 47.8 47.1 1.02
1000x1000 50.0 47.5 1.05
1001x1001 46.7 44.2 1.06
1024x1024 48.8 44.0 1.11
1536x1536 48.9 44.7 1.10
2048x2048 42.9 42.4 1.01
3072x3072 28.1 25.2 1.11
4096x4096 24.7 28.2 0.88
4097x4097 17.3 26.0 0.67
8x10000 37.4 10.5 3.55
100x10000 43.6 50.5 0.86
1000x10000 21.6 27.5 0.78
4000x10000 25.4 23.4 1.09
10000x8 48.5 42.5 1.14
10000x100 43.8 41.9 1.05
10000x1000 34.6 33.2 1.04
10000x4000 30.8 27.9 1.10
GEMV double
m×n Eigen GFLOP/s OpenBLAS GFLOP/s Eigen ÷ OpenBLAS
2x2 1.9 0.4 4.61
3x3 3.0 0.8 3.70
4x4 5.6 1.5 3.68
6x6 11.6 2.2 5.18
8x8 17.6 4.2 4.19
12x12 21.3 6.0 3.52
16x16 28.3 7.3 3.89
24x24 31.1 9.7 3.19
32x32 35.5 12.5 2.84
48x48 37.5 16.5 2.28
64x64 36.6 12.9 2.84
96x96 35.0 18.0 1.95
100x100 31.8 18.1 1.75
128x128 35.5 16.5 2.15
192x192 21.8 16.6 1.31
200x200 22.9 16.9 1.35
256x256 23.9 16.4 1.46
257x257 23.0 16.0 1.43
384x384 23.3 16.9 1.38
500x500 24.7 16.8 1.47
512x512 24.2 17.0 1.42
768x768 24.0 16.9 1.42
1000x1000 24.9 8.0 3.10
1001x1001 24.3 7.9 3.07
1024x1024 22.6 6.7 3.39
1536x1536 21.8 16.6 1.31
2048x2048 13.5 9.1 1.49
3072x3072 14.8 10.8 1.37
4096x4096 11.9 11.9 1.00
4097x4097 10.1 15.6 0.64
8x10000 22.9 4.3 5.33
100x10000 20.5 16.5 1.24
1000x10000 10.8 16.0 0.68
4000x10000 14.3 16.0 0.89
10000x8 24.4 11.5 2.12
10000x100 20.8 11.4 1.83
10000x1000 17.2 11.1 1.55
10000x4000 16.0 11.0 1.45
GEMM float
m×n×k Eigen GFLOP/s OpenBLAS GFLOP/s Eigen ÷ OpenBLAS
2x2x2 2.4 0.5 4.77
3x3x3 4.3 1.5 2.91
4x4x4 11.0 4.0 2.78
6x6x6 11.3 8.6 1.32
8x8x8 23.6 19.1 1.24
12x12x12 47.1 40.6 1.16
16x16x16 55.9 63.3 0.88
24x24x24 78.8 77.3 1.02
32x32x32 91.3 94.3 0.97
48x48x48 101.2 103.7 0.98
64x64x64 103.6 61.2 1.69
96x96x96 108.9 109.0 1.00
100x100x100 105.9 101.3 1.05
128x128x128 110.0 109.9 1.00
160x160x160 111.6 109.9 1.02
192x192x192 116.5 92.5 1.26
200x200x200 116.4 108.2 1.08
224x224x224 117.3 111.1 1.06
256x256x256 116.4 110.8 1.05
257x257x257 112.7 104.4 1.08
288x288x288 119.8 111.9 1.07
320x320x320 120.2 112.1 1.07
384x384x384 120.7 106.8 1.13
448x448x448 121.0 113.0 1.07
500x500x500 121.9 111.4 1.09
512x512x512 121.9 113.1 1.08
768x768x768 123.4 113.6 1.09
1000x1000x1000 123.9 113.2 1.09
1001x1001x1001 122.5 111.4 1.10
1024x1024x1024 123.8 113.7 1.09
1536x1536x1536 124.2 113.8 1.09
2048x2048x2048 123.8 113.4 1.09
3072x3072x3072 124.5 113.5 1.10
4096x4096x4096 124.3 113.8 1.09
4097x4097x4097 123.9 113.0 1.10
64x64x1024 101.3 100.2 1.01
64x1024x64 102.2 109.4 0.93
256x256x1024 118.6 109.6 1.08
1024x64x64 102.3 102.2 1.00
1024x256x256 118.9 112.5 1.06
4096x96x96 108.9 109.4 0.99
4096x128x128 112.9 110.5 1.02
4096x144x144 114.4 111.3 1.03
4096x160x160 115.5 111.6 1.03
4096x176x176 116.4 112.0 1.04
8192x128x128 113.2 110.6 1.02
10000x8x8 70.4 73.5 0.96
10000x100x100 112.7 111.1 1.01
10000x1000x1000 124.0 113.4 1.09
10000x4000x4000 124.9 113.7 1.10
GEMM double
m×n×k Eigen GFLOP/s OpenBLAS GFLOP/s Eigen ÷ OpenBLAS
2x2x2 2.5 0.6 4.10
3x3x3 4.7 1.8 2.66
4x4x4 7.9 4.3 1.84
6x6x6 9.5 9.3 1.02
8x8x8 16.2 18.1 0.89
12x12x12 25.4 31.1 0.82
16x16x16 34.4 38.8 0.89
24x24x24 41.5 46.5 0.89
32x32x32 44.8 47.7 0.94
48x48x48 50.9 52.1 0.98
64x64x64 52.0 29.1 1.79
96x96x96 52.9 53.3 0.99
100x100x100 52.9 52.7 1.00
128x128x128 54.9 44.2 1.24
160x160x160 56.7 54.6 1.04
192x192x192 58.3 50.0 1.17
200x200x200 57.9 55.2 1.05
224x224x224 58.5 55.5 1.05
256x256x256 58.9 52.4 1.12
257x257x257 58.0 53.8 1.08
288x288x288 59.8 55.9 1.07
320x320x320 59.5 56.1 1.06
384x384x384 60.3 53.3 1.13
448x448x448 60.6 56.5 1.07
500x500x500 60.8 56.5 1.08
512x512x512 60.6 56.5 1.07
768x768x768 61.5 56.9 1.08
1000x1000x1000 61.6 56.9 1.08
1001x1001x1001 61.2 56.4 1.09
1024x1024x1024 61.2 56.9 1.08
1536x1536x1536 61.6 56.7 1.08
2048x2048x2048 61.4 56.9 1.08
3072x3072x3072 61.8 56.7 1.09
4096x4096x4096 61.9 57.1 1.08
4097x4097x4097 61.7 56.7 1.09
64x64x1024 53.1 49.7 1.07
64x1024x64 52.4 54.6 0.96
256x256x1024 59.9 55.6 1.08
1024x64x64 50.9 53.4 0.95
1024x256x256 59.4 56.2 1.06
4096x96x96 54.6 54.5 1.00
4096x128x128 56.4 55.0 1.03
4096x144x144 57.1 55.5 1.03
4096x160x160 57.5 55.7 1.03
4096x176x176 58.0 55.9 1.04
8192x128x128 56.3 55.0 1.02
10000x8x8 34.3 36.2 0.95
10000x100x100 56.2 55.4 1.01
10000x1000x1000 61.5 56.5 1.09
10000x4000x4000 62.1 56.8 1.09
TRSM float
m×n Eigen GFLOP/s OpenBLAS GFLOP/s Eigen ÷ OpenBLAS
2x2 0.5 0.5 0.93
3x3 1.2 0.9 1.35
4x4 6.2 1.5 4.06
6x6 6.9 2.9 2.41
8x8 19.9 3.8 5.27
12x12 27.6 6.3 4.38
16x16 40.2 5.5 7.28
24x24 46.4 9.1 5.11
32x32 54.8 10.6 5.16
48x48 60.1 15.4 3.90
64x64 64.3 15.5 4.14
96x96 69.1 27.3 2.53
100x100 68.1 27.3 2.50
128x128 69.6 33.2 2.10
192x192 78.4 40.1 1.95
200x200 79.6 44.3 1.80
256x256 77.6 51.3 1.51
257x257 76.4 49.2 1.55
384x384 83.7 60.5 1.38
500x500 96.2 68.6 1.40
512x512 96.7 71.0 1.36
768x768 98.8 80.7 1.22
1000x1000 106.3 86.2 1.23
1001x1001 104.2 84.3 1.24
1024x1024 100.7 87.2 1.16
1536x1536 109.1 94.2 1.16
2048x2048 105.0 98.0 1.07
3072x3072 114.5 102.5 1.12
4096x4096 108.9 105.3 1.03
4097x4097 108.5 104.4 1.04
64x4096 64.8 20.2 3.21
256x4096 78.6 52.5 1.50
1024x8 62.3 38.0 1.64
1024x64 93.6 76.3 1.23
1024x256 99.4 84.7 1.17
1024x4096 100.2 87.0 1.15
4096x8 42.6 42.6 1.00
4096x64 93.0 88.7 1.05
4096x256 105.1 101.1 1.04
4096x1024 108.5 104.6 1.04
TRSM double
m×n Eigen GFLOP/s OpenBLAS GFLOP/s Eigen ÷ OpenBLAS
2x2 0.5 0.5 1.01
3x3 1.2 0.9 1.22
4x4 4.8 1.7 2.91
6x6 6.9 2.8 2.44
8x8 12.2 3.7 3.30
12x12 17.8 6.2 2.89
16x16 20.2 7.5 2.68
24x24 23.6 10.3 2.30
32x32 27.9 12.4 2.25
48x48 30.8 17.1 1.80
64x64 32.9 13.3 2.46
96x96 34.2 25.9 1.32
100x100 34.4 25.7 1.34
128x128 34.1 25.0 1.36
192x192 39.6 31.7 1.25
200x200 40.5 36.1 1.12
256x256 39.9 36.4 1.10
257x257 38.8 37.9 1.03
384x384 47.1 43.6 1.08
500x500 49.0 45.7 1.07
512x512 47.1 46.2 1.02
768x768 51.9 49.5 1.05
1000x1000 54.0 51.1 1.06
1001x1001 53.4 50.3 1.06
1024x1024 50.3 51.0 0.99
1536x1536 55.7 52.5 1.06
2048x2048 50.1 53.5 0.94
3072x3072 56.5 54.4 1.04
4096x4096 54.4 55.3 0.98
4097x4097 54.3 54.9 0.99
64x4096 32.9 20.7 1.59
256x4096 40.0 39.4 1.02
1024x8 30.0 31.4 0.95
1024x64 46.6 47.5 0.98
1024x256 49.6 50.4 0.98
1024x4096 50.1 50.6 0.99
4096x8 24.9 24.8 1.01
4096x64 47.7 48.1 0.99
4096x256 52.9 53.4 0.99
4096x1024 54.1 54.7 0.99
SYRK float
n×k Eigen GFLOP/s OpenBLAS GFLOP/s Eigen ÷ OpenBLAS
2x2 0.2 0.4 0.50
3x3 0.5 1.0 0.47
4x4 1.2 2.2 0.54
6x6 2.8 4.7 0.61
8x8 7.0 8.3 0.84
12x12 10.9 12.8 0.85
16x16 20.0 18.2 1.10
24x24 33.7 34.2 0.98
32x32 46.4 44.2 1.05
48x48 61.1 62.5 0.98
64x64 73.8 71.0 1.04
96x96 84.6 85.2 0.99
100x100 86.5 77.6 1.11
128x128 88.4 88.8 1.00
192x192 100.0 70.7 1.41
200x200 99.9 93.3 1.07
256x256 102.2 97.8 1.05
257x257 101.2 91.9 1.10
384x384 110.0 95.2 1.16
500x500 113.3 104.1 1.09
512x512 113.3 99.2 1.14
768x768 117.5 108.4 1.08
1000x1000 118.9 109.8 1.08
1001x1001 117.7 107.0 1.10
1024x1024 118.5 105.6 1.12
1536x1536 121.1 111.6 1.09
2048x2048 121.0 109.6 1.10
3072x3072 121.9 110.8 1.10
4096x4096 121.0 111.7 1.08
4097x4097 121.1 111.1 1.09
64x4096 67.6 50.6 1.34
256x4096 102.7 84.8 1.21
1024x4096 117.6 105.3 1.12
4096x8 59.0 57.7 1.02
4096x64 112.5 113.2 0.99
4096x256 121.1 113.7 1.07
4096x1024 121.0 111.7 1.08
SYRK double
n×k Eigen GFLOP/s OpenBLAS GFLOP/s Eigen ÷ OpenBLAS
2x2 0.2 0.4 0.43
3x3 0.4 0.9 0.41
4x4 0.9 2.0 0.48
6x6 2.5 4.3 0.58
8x8 4.6 7.2 0.64
12x12 7.6 14.8 0.52
16x16 13.1 17.7 0.74
24x24 18.1 26.3 0.69
32x32 23.6 32.9 0.72
48x48 30.8 41.0 0.75
64x64 35.8 19.1 1.87
96x96 39.8 45.6 0.87
100x100 41.1 44.7 0.92
128x128 43.9 33.7 1.30
192x192 48.9 42.4 1.15
200x200 48.9 51.0 0.96
256x256 50.7 44.9 1.13
257x257 50.6 49.4 1.02
384x384 54.6 49.9 1.10
500x500 56.3 54.4 1.04
512x512 56.4 50.6 1.12
768x768 58.2 55.5 1.05
1000x1000 59.2 56.1 1.06
1001x1001 58.9 55.5 1.06
1024x1024 59.0 53.8 1.10
1536x1536 59.5 54.8 1.09
2048x2048 58.6 55.4 1.06
3072x3072 58.9 55.7 1.06
4096x4096 59.2 56.4 1.05
4097x4097 59.8 56.0 1.07
64x4096 35.2 27.1 1.30
256x4096 52.4 45.1 1.16
1024x4096 57.1 53.5 1.07
4096x8 37.3 23.8 1.57
4096x64 56.0 55.8 1.00
4096x256 60.3 56.6 1.06
4096x1024 59.1 56.3 1.05
POTRF float
n Eigen GFLOP/s OpenBLAS GFLOP/s Eigen ÷ OpenBLAS
2 0.5 0.1 4.36
3 0.6 0.3 2.41
4 1.1 0.5 2.31
6 1.5 0.9 1.66
8 2.2 1.4 1.58
12 3.8 2.3 1.66
16 5.5 3.0 1.86
24 9.2 3.7 2.49
32 8.2 4.0 2.04
48 13.6 11.8 1.15
64 18.4 16.2 1.14
96 27.1 22.5 1.20
100 27.0 21.8 1.24
128 38.4 26.6 1.44
192 49.5 46.4 1.07
200 50.4 44.6 1.13
256 64.5 55.0 1.17
257 60.7 52.7 1.15
384 77.6 68.2 1.14
500 83.3 68.6 1.22
512 84.6 68.0 1.24
768 95.0 84.3 1.13
1000 100.2 88.6 1.13
1001 98.6 86.5 1.14
1024 94.9 88.7 1.07
1536 105.6 97.1 1.09
2048 106.7 100.3 1.06
3072 111.8 105.4 1.06
4096 111.9 105.7 1.06
4097 110.6 104.9 1.05
POTRF double
n Eigen GFLOP/s OpenBLAS GFLOP/s Eigen ÷ OpenBLAS
2 0.5 0.1 3.97
3 0.8 0.3 2.85
4 1.0 0.5 2.25
6 1.5 0.9 1.78
8 2.3 1.3 1.79
12 3.9 2.1 1.86
16 5.6 2.8 2.02
24 8.9 3.9 2.27
32 6.5 4.2 1.53
48 9.7 10.8 0.90
64 12.3 14.0 0.88
96 16.8 18.5 0.91
100 16.8 18.6 0.91
128 22.5 21.7 1.04
192 27.8 32.0 0.87
200 28.2 31.2 0.90
256 33.9 29.4 1.15
257 32.9 34.6 0.95
384 39.9 38.1 1.05
500 42.6 42.0 1.01
512 42.3 40.1 1.05
768 48.0 45.8 1.05
1000 51.0 49.3 1.04
1001 50.7 48.6 1.04
1024 48.1 46.7 1.03
1536 52.6 50.5 1.04
2048 52.8 51.4 1.03
3072 55.9 53.1 1.05
4096 56.6 54.1 1.04
4097 56.3 53.8 1.05
GETRF float
n Eigen GFLOP/s OpenBLAS GFLOP/s Eigen ÷ OpenBLAS
2 0.2 0.3 0.72
3 0.4 0.4 0.94
4 0.7 0.6 1.25
6 1.3 0.7 1.87
8 2.1 0.8 2.50
12 3.8 1.2 3.33
16 5.7 1.5 3.86
24 8.1 3.4 2.38
32 11.5 4.1 2.78
48 18.1 8.3 2.18
64 24.3 9.4 2.59
96 35.3 18.8 1.87
100 37.1 19.2 1.94
128 42.1 23.0 1.83
192 51.3 34.8 1.47
200 51.6 35.6 1.45
256 62.0 43.0 1.44
257 60.4 41.2 1.46
384 73.9 54.5 1.36
500 79.0 62.8 1.26
512 80.2 64.9 1.23
768 89.9 76.0 1.18
1000 94.8 82.1 1.16
1001 93.4 80.4 1.16
1024 92.2 83.7 1.10
1536 101.4 92.4 1.10
2048 100.3 96.1 1.04
3072 106.9 100.7 1.06
4096 102.2 103.3 0.99
4097 102.5 102.4 1.00
GETRF double
n Eigen GFLOP/s OpenBLAS GFLOP/s Eigen ÷ OpenBLAS
2 0.3 0.2 1.44
3 0.5 0.4 1.35
4 0.7 0.4 1.62
6 1.2 0.6 1.97
8 2.0 0.7 2.80
12 3.8 1.0 3.85
16 5.2 1.2 4.22
24 6.8 2.9 2.37
32 8.7 3.7 2.35
48 13.2 7.9 1.68
64 16.9 10.0 1.69
96 22.7 16.9 1.34
100 23.2 17.1 1.36
128 24.0 17.9 1.34
192 28.1 28.5 0.99
200 28.5 28.5 1.00
256 34.1 30.4 1.12
257 33.3 31.1 1.07
384 39.4 37.7 1.04
500 41.9 41.3 1.02
512 41.9 41.1 1.02
768 46.7 46.1 1.01
1000 49.1 48.0 1.02
1001 48.6 47.4 1.03
1024 47.4 48.1 0.98
1536 51.3 50.6 1.02
2048 46.8 51.3 0.91
3072 52.8 52.7 1.00
4096 51.5 53.7 0.96
4097 51.5 53.4 0.96
GEQRF float
m×n Eigen GFLOP/s OpenBLAS GFLOP/s Eigen ÷ OpenBLAS
2x2 0.2 0.2 1.48
3x3 0.4 0.3 1.42
4x4 0.7 0.5 1.43
6x6 1.3 0.9 1.49
8x8 2.0 1.3 1.55
12x12 4.0 2.6 1.58
16x16 6.2 3.8 1.63
24x24 10.6 6.6 1.60
32x32 14.2 9.1 1.56
48x48 19.9 13.4 1.48
64x64 15.7 16.7 0.94
96x96 27.7 20.2 1.38
100x100 24.5 20.5 1.19
128x128 33.4 23.6 1.42
192x192 46.6 35.9 1.30
200x200 47.4 43.1 1.10
256x256 54.9 45.5 1.21
257x257 51.9 51.8 1.00
384x384 68.1 61.0 1.12
500x500 75.6 72.0 1.05
512x512 76.2 63.1 1.21
768x768 86.7 74.3 1.17
1000x1000 91.9 87.2 1.05
1001x1001 90.3 85.8 1.05
1024x1024 91.0 76.4 1.19
1536x1536 98.0 86.6 1.13
2048x2048 100.4 84.2 1.19
3072x3072 102.2 90.3 1.13
4096x4096 102.3 83.2 1.23
4097x4097 101.3 84.2 1.20
4096x8 20.4 9.9 2.05
4096x64 26.6 21.2 1.25
4096x256 57.5 43.9 1.31
4096x1024 89.5 77.5 1.15
10000x8 20.6 9.7 2.12
10000x100 38.3 22.8 1.68
10000x1000 92.4 83.0 1.11
10000x4000 102.9 87.6 1.17
100000x8 19.2 9.1 2.10
100000x64 26.1 19.0 1.37
100000x256 56.2 41.4 1.36
GEQRF double
m×n Eigen GFLOP/s OpenBLAS GFLOP/s Eigen ÷ OpenBLAS
2x2 0.2 0.2 1.49
3x3 0.4 0.3 1.52
4x4 0.7 0.5 1.50
6x6 1.3 0.8 1.57
8x8 2.0 1.2 1.62
12x12 3.8 2.2 1.70
16x16 5.5 3.1 1.78
24x24 7.8 4.6 1.68
32x32 9.1 5.8 1.57
48x48 11.1 9.2 1.21
64x64 9.9 9.7 1.02
96x96 15.4 12.8 1.21
100x100 14.8 13.1 1.13
128x128 18.3 13.8 1.33
192x192 24.1 21.5 1.12
200x200 24.7 25.5 0.97
256x256 27.9 25.0 1.12
257x257 27.2 29.8 0.91
384x384 34.0 33.1 1.03
500x500 37.3 39.4 0.95
512x512 37.0 35.0 1.06
768x768 42.0 41.0 1.02
1000x1000 44.8 45.6 0.98
1001x1001 44.4 45.0 0.99
1024x1024 43.9 40.9 1.07
1536x1536 47.8 45.8 1.04
2048x2048 47.7 43.6 1.09
3072x3072 50.3 44.5 1.13
4096x4096 50.6 44.9 1.13
4097x4097 50.3 43.5 1.16
4096x8 9.3 7.1 1.30
4096x64 12.6 12.2 1.03
4096x256 27.8 24.7 1.13
4096x1024 43.6 41.8 1.05
10000x8 9.2 6.8 1.35
10000x100 17.3 12.2 1.43
10000x1000 44.7 41.6 1.08
10000x4000 51.3 43.8 1.17
100000x8 9.0 6.5 1.38
100000x64 12.1 10.5 1.15
100000x256 26.9 22.1 1.21
SYEV float
n Eigen GFLOP/s OpenBLAS GFLOP/s Eigen ÷ OpenBLAS
2 0.9 0.7 1.34
3 0.9 0.6 1.35
4 1.1 0.9 1.26
6 1.7 1.4 1.21
8 2.4 2.1 1.18
12 4.1 3.1 1.32
16 5.8 4.1 1.42
24 8.5 6.4 1.31
32 11.2 8.7 1.29
48 16.8 10.0 1.68
64 18.4 11.8 1.56
96 25.1 14.8 1.69
100 25.5 14.6 1.74
128 33.7 16.3 2.07
192 40.1 19.7 2.04
200 41.2 19.2 2.14
256 43.5 20.9 2.08
257 43.4 21.1 2.05
384 49.3 23.2 2.12
500 53.1 25.1 2.12
512 52.1 24.4 2.13
768 56.1 26.0 2.16
1000 60.4 27.6 2.19
1001 52.9 27.5 1.92
1024 58.5 26.7 2.19
1536 60.8 26.7 2.28
2048 61.4 27.1 2.26
SYEV double
n Eigen GFLOP/s OpenBLAS GFLOP/s Eigen ÷ OpenBLAS
2 1.0 0.7 1.35
3 0.8 0.6 1.48
4 1.0 0.8 1.26
6 1.5 1.2 1.28
8 2.1 1.7 1.27
12 3.5 2.4 1.44
16 4.9 3.2 1.54
24 7.4 4.8 1.52
32 9.2 5.8 1.60
48 12.7 7.7 1.65
64 15.6 9.4 1.66
96 18.5 10.7 1.73
100 19.2 11.6 1.65
128 21.2 12.8 1.66
192 22.9 13.8 1.66
200 23.4 13.4 1.74
256 22.9 15.9 1.44
257 21.5 15.9 1.35
384 24.9 15.4 1.62
500 26.7 19.1 1.40
512 25.8 17.4 1.48
768 27.0 19.6 1.38
1000 28.6 20.8 1.38
1001 23.9 20.8 1.15
1024 27.5 20.2 1.36
1536 28.3 20.1 1.41
2048 26.7 20.6 1.30
GESDD float
m×n Eigen GFLOP/s OpenBLAS GFLOP/s Eigen ÷ OpenBLAS
2x2 2.4 0.4 6.65
3x3 1.6 0.7 2.25
4x4 2.1 1.1 1.96
6x6 2.1 1.9 1.12
8x8 2.5 2.7 0.94
12x12 2.9 4.3 0.68
16x16 5.6 5.5 1.01
24x24 7.8 7.8 1.00
32x32 10.9 11.1 0.99
48x48 16.8 18.2 0.92
64x64 24.1 26.4 0.91
96x96 37.7 35.8 1.06
100x100 39.3 36.5 1.08
128x128 49.4 46.0 1.08
192x192 72.0 49.2 1.46
200x200 74.3 50.0 1.49
256x256 81.4 48.5 1.68
257x257 85.3 56.5 1.51
384x384 108.2 63.0 1.72
500x500 126.2 77.1 1.64
512x512 118.3 64.5 1.83
768x768 141.3 77.2 1.83
1000x1000 160.6 96.1 1.67
1001x1001 159.2 95.5 1.67
1024x1024 149.6 80.7 1.85
1536x1536 168.7 94.9 1.78
2048x2048 166.2 93.7 1.77
4096x64 93.2 62.7 1.49
4096x256 153.5 105.2 1.46
4096x1024 174.8 118.5 1.47
10000x8 32.2 29.5 1.09
10000x100 127.7 70.1 1.82
10000x1000 207.6 169.1 1.23
GESDD double
m×n Eigen GFLOP/s OpenBLAS GFLOP/s Eigen ÷ OpenBLAS
2x2 2.4 0.4 6.63
3x3 1.3 0.6 2.04
4x4 1.6 0.9 1.71
6x6 1.9 1.6 1.16
8x8 1.8 2.2 0.82
12x12 2.1 3.3 0.64
16x16 4.3 4.3 0.99
24x24 5.5 5.7 0.97
32x32 7.4 9.5 0.78
48x48 11.6 14.4 0.81
64x64 15.3 20.5 0.75
96x96 22.8 27.9 0.82
100x100 23.8 28.9 0.82
128x128 29.3 35.2 0.83
192x192 40.0 38.2 1.05
200x200 41.9 38.2 1.10
256x256 46.2 38.9 1.19
257x257 47.9 43.7 1.10
384x384 59.5 50.9 1.17
500x500 68.9 59.5 1.16
512x512 65.3 51.1 1.28
768x768 76.6 63.7 1.20
1000x1000 85.0 74.6 1.14
1001x1001 84.1 75.4 1.12
1024x1024 77.8 63.3 1.23
1536x1536 87.2 75.5 1.15
2048x2048 72.0 69.1 1.04
4096x64 49.0 36.6 1.34
4096x256 79.2 62.1 1.28
4096x1024 88.2 75.1 1.18
10000x8 13.7 20.7 0.66
10000x100 64.5 37.6 1.71
10000x1000 104.8 93.1 1.13
GEEV float
n Eigen GFLOP/s OpenBLAS GFLOP/s Eigen ÷ OpenBLAS
2 2.6 0.4 6.59
3 1.3 0.6 2.15
4 2.3 0.9 2.47
6 2.7 1.6 1.74
8 3.9 2.2 1.82
12 5.5 3.5 1.56
16 6.8 4.5 1.52
24 10.0 7.0 1.43
32 11.6 8.8 1.32
48 13.5 11.7 1.16
64 15.2 13.8 1.10
96 17.6 16.4 1.07
100 18.2 17.0 1.07
128 18.7 19.8 0.95
192 19.9 32.2 0.62
200 20.6 35.7 0.58
256 20.5 41.5 0.49
257 20.8 42.1 0.49
384 18.8 58.6 0.32
500 22.7 71.3 0.32
512 22.2 48.8 0.46
768 24.3 83.2 0.29
1000 25.2 106.9 0.24
1001 25.7 107.9 0.24
1024 19.7 76.4 0.26
GEEV double
n Eigen GFLOP/s OpenBLAS GFLOP/s Eigen ÷ OpenBLAS
2 2.6 0.4 6.30
3 1.2 0.6 2.19
4 1.7 0.8 2.01
6 2.2 1.3 1.68
8 3.0 2.0 1.53
12 4.0 2.8 1.42
16 5.0 3.7 1.35
24 5.9 5.3 1.12
32 6.5 6.8 0.96
48 7.8 8.8 0.88
64 8.4 10.3 0.81
96 9.2 11.0 0.83
100 9.6 11.6 0.82
128 10.0 13.0 0.77
192 9.7 18.3 0.53
200 10.0 19.7 0.51
256 10.0 22.4 0.45
257 9.7 22.5 0.43
384 10.4 30.5 0.34
500 10.6 36.0 0.29
512 10.2 21.7 0.47
768 10.7 36.5 0.29
1000 10.7 51.5 0.21
1001 10.8 51.2 0.21
1024 7.8 35.4 0.22