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

Single-threaded BLAS (AXPY, DOT, GEMV, GEMM, TRSM, TRMM, SYMM, SYRK) and LAPACK (POTRF, PSTRF, SYTRF, GETRF, GEQRF, GELS, 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.

This page was first published with a measurement of 2026-09-20 at Eigen master 46a2d0c56 on macOS 27.0, and updated on 2026-10-03 to a re-measurement at master 3cf994918 on macOS 27.0.1. It now shows Eigen and OpenBLAS measured again at master 674e4a4e5, in one session, and adds five operations: TRMM, SYMM, PSTRF, SYTRF and GELS. Against the 2026-10-03 measurement, on the cells both share, Eigen’s NEON rates repeat within 6 % (geometric mean per operation and scalar) except GEQRF, 11 to 12 % faster, and GEEV, 53 % (float) and 73 % (double) faster. The earlier versions of the page and their result files are in the history of the website repository.

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.1 (build 26A434), 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 674e4a4e5 (5.0.1-dev), default configuration, no external BLAS. The measured tree, 0e7c9e40a, is that master plus the comparison harness; the library code under Eigen/ is master’s. 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; its LAPACK is the reference LAPACK it bundles
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 2026-10-26 00:55 to 08:54 (UTC−7): 51 runs, about 5.7 hours of measurement
Harness benchmarks/comparison/run.py --isa aarch64-neon from Eigen merge request !2903 and the commits that add the five new operations, 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 three times, in three binaries of the same build: the one linked against OpenBLAS, which also measured OpenBLAS, and two linked against Accelerate and Arm Performance Libraries, where only the Eigen cells ran. The Eigen line on each chart is the median of the three passes and the shaded band is their spread, the run-to-run noise on this host: within 3 % for 92 % of the cells and above 10 % for 1 %. A ratio divides that median by OpenBLAS’s rate from its run.

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, no keyboard or mouse input for 10 minutes) with no thermal or performance warning from pmset, and was discarded and repeated if the whole machine averaged 1.45 busy cores or more during it, or reached 3.0 in any 5 s window; 5 attempts were discarded this way. The CI virtual machine on the host was paused for the whole session. These are the limits of the second half of the SME page’s session, which describes how they were reached.

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.48 ns per call for Eigen against 12.4 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, sweeps GEMM double, other shapes GEMM float, square GEMM float, 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

TRMM

X.noalias() = A.triangularView<Lower>() * B against ?trmm with the m-by-m lower triangle on the left and n columns in B, no transposition, non-unit diagonal; (m(m+1)n) flops, TRSM’s count. ?trmm overwrites B, so the reference arm copies B into the destination and multiplies in place; the Eigen arm writes the product to the destination, which noalias() zero-fills before accumulating. Each arm makes the one pass over the destination its interface requires, and neither allocates inside the timed region.

The same shapes as TRSM: square, then the sweeps with a fixed triangle of order 1024 or 4096 and a growing number of columns, then the remaining shapes with 4096 columns against a small triangle.

TRMM double, square TRMM double, sweeps TRMM double, other shapes TRMM float, square TRMM float, sweeps TRMM float, other shapes

SYMM

C.noalias() += A.selfadjointView<Lower>() * B against ?symm (?hemm for a complex scalar) with the m-by-m symmetric matrix stored in its lower triangle, on the left, and n columns in B; (2m^2n) flops, the count of the general product of the same shape. C accumulates across iterations and is never reset, as in GEMM.

The same shapes as TRSM.

SYMM double, square SYMM double, sweeps SYMM double, other shapes SYMM float, square SYMM float, sweeps SYMM 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

PSTRF

LDLT<Ref<MatrixXd>> in place against ?pstrf, lower triangle, symmetric positive definite operand; (n(n-1)(n-2)/3 + 2n(n-1)) flops for both, (n^3/3) to leading order. The two compute different factors of the same pivoted matrix, (P^T A P = L L^T) for LAPACK and (L D L^T) for Eigen, and pivot on the same entry, the largest diagonal element of the remaining Schur complement. Both arms copy the operand into a destination allocated once and factorize the copy, as GETRF does. LDLT::compute also evaluates the operand’s L1 norm for rcond(), which ?pstrf does not. Each result is checked by applying the stored factors to a random vector and comparing with (Ax).

PSTRF double PSTRF float

SYTRF

BunchKaufman<Ref<MatrixXd>> in place against ?sytrf (?hetrf for a complex scalar), lower triangle, symmetric indefinite operand; (n(n-1)(n-2)/3 + 2n(n-1)) flops for both, (n^3/3) to leading order. Both arms copy the operand into a destination allocated once and factorize the copy, as GETRF does; pivot and workspace arrays are set up once per shape. Each result is checked by applying the stored factors, with the pivot blocks of D, to a random vector and comparing with (Ax).

SYTRF double SYTRF 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, sweeps GEQRF float, square GEQRF float, sweeps

GELS

Full-rank least squares (\min \lVert AX - B \rVert) through Householder QR with A m-by-n, m ≥ n, and B m-by-nrhs: HouseholderQR<Ref<MatrixXd>> followed by qr.solve(B) against ?gels (trans = 'N'); (2mn^2 - 2n^3/3) flops for the factorization plus (\text{nrhs},(4mn - n^2)) for applying (Q^T) and solving with R. ?gels overwrites A and B, so the reference arm copies both into destinations allocated once. The Eigen arm factorizes a copy of A through the in-place HouseholderQR and writes qr.solve(B) to a preallocated X; solve() copies B into a temporary it allocates, which is the cost of the expression a user writes, so it is timed. The solution is checked through the normal equations on a well-conditioned operand.

Square shapes with one right-hand side, then the tall-skinny sweeps with m fixed at 4096, 10000 and 100000, then right-hand-side sweeps: 16 to 256 columns of B at m = n = 1024 and 16 to 1024 at 4096 by 256.

GELS double, square GELS double, sweeps GELS float, square GELS float, 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 3.0 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, sweeps GESDD float, square GESDD float, 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 2.1 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.19 1.84 1.09 1.03 1.15
AXPY double OpenBLAS 4.16 1.37 0.73 0.93 1.04
DOT float OpenBLAS 17.24 7.50 1.68 1.35 1.09
DOT double OpenBLAS 17.04 3.23 1.35 1.32 1.06
GEMV float OpenBLAS 2.76 1.21 1.08 0.93 –
GEMV double OpenBLAS 4.01 2.37 1.41 0.86 –
GEMM float OpenBLAS 1.78 1.00 1.09 1.09 –
GEMM double OpenBLAS 1.76 1.09 1.08 1.08 –
TRSM float OpenBLAS 3.59 4.58 1.65 1.17 –
TRSM double OpenBLAS 2.28 2.20 1.21 1.08 –
TRMM float OpenBLAS 0.53 0.90 1.02 1.04 –
TRMM double OpenBLAS 0.53 0.95 0.94 1.01 –
SYMM float OpenBLAS 0.85 1.11 1.11 1.09 –
SYMM double OpenBLAS 0.74 1.10 1.08 1.07 –
SYRK float OpenBLAS 0.66 1.02 1.12 1.09 –
SYRK double OpenBLAS 0.53 0.95 1.07 1.06 –
POTRF float OpenBLAS 1.99 1.70 1.14 1.07 –
POTRF double OpenBLAS 2.29 1.38 1.01 1.04 –
PSTRF float OpenBLAS 1.49 2.56 2.63 1.53 –
PSTRF double OpenBLAS 1.59 1.79 1.41 1.18 –
SYTRF float OpenBLAS 1.49 2.48 3.72 1.59 –
SYTRF double OpenBLAS 1.48 1.69 1.49 1.12 –
GETRF float OpenBLAS 1.74 2.24 1.32 1.08 –
GETRF double OpenBLAS 2.21 1.69 1.05 1.02 –
GEQRF float OpenBLAS 1.40 1.66 1.21 1.18 –
GEQRF double OpenBLAS 1.51 1.66 1.13 1.12 –
GELS float OpenBLAS 1.73 2.27 1.44 1.22 –
GELS double OpenBLAS 1.77 2.10 1.28 1.15 –
SYEV float OpenBLAS 1.19 1.61 2.19 2.28 –
SYEV double OpenBLAS 1.17 1.37 1.39 1.36 –
GESDD float OpenBLAS 1.56 1.01 1.71 1.79 –
GESDD double OpenBLAS 1.47 0.85 1.18 1.10 –
GEEV float OpenBLAS 2.69 1.73 0.52 – –
GEEV double OpenBLAS 2.61 1.57 0.59 – –

Observations

  • Level with OpenBLAS’s NEON kernels on the large products. GEMM, SYMM, SYRK, TRMM and TRSM are 0.9 to 1.2 times OpenBLAS in double from n = 192, and POTRF and GETRF 1.0 to 1.05 above n = 192. The vector operations lead at the small end (DOT 17 times at n ≤ 16, where OpenBLAS’s call cost dominates) and trail slightly in the middle: AXPY 0.73 for n = 192 to 1024, GEMV 0.86 above n = 1536.
  • The new factorizations are ahead of OpenBLAS’s reference-LAPACK code at every band above n = 24: PSTRF 1.2 to 1.8, SYTRF 1.1 to 1.7 and GELS 1.15 to 2.1 in double.
  • Small triangles. TRMM, SYMM and SYRK are 0.5 to 0.7 times OpenBLAS at n ≤ 16.
  • GEEV trails OpenBLAS at n = 192 to 1024 (0.59 in double); it leads at the small end.

Caveats

  • 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 logged-in sessions and their background services. Runs that they disturbed beyond the limits above were repeated; smaller disturbances remain in the numbers.
  • Eigen is built here without SME, the default for this platform, so every kernel is NEON. OpenBLAS’s vortexm4 kernels are NEON as well.
  • PSTRF compares two algorithms that pivot on the same entry but produce different factors, (L L^T) and (L D L^T), and charges both the same flop count.

Full tables

GFLOP/s per shape and library, with the Eigen ÷ library ratio. The Eigen column is the median over its three passes; each ratio is formed within the library’s own binary and run.

AXPY float
n Eigen GFLOP/s OpenBLAS GFLOP/s Eigen ÷ OpenBLAS
2 4.9 1.3 3.63
3 5.6 1.9 2.96
4 12.1 1.9 6.46
6 11.3 2.4 4.80
8 20.9 4.7 4.44
12 24.2 4.9 4.91
16 25.9 8.2 3.14
24 27.7 10.8 2.55
32 18.4 13.2 1.39
48 19.5 13.0 1.51
64 22.6 9.2 2.90
96 27.2 15.9 1.70
100 27.2 15.6 1.75
128 28.0 18.1 1.54
192 29.3 21.2 1.38
256 30.0 23.1 1.26
384 26.6 25.2 1.05
512 27.6 26.5 1.04
768 28.1 28.0 1.00
1000 28.8 28.1 1.02
1001 28.7 28.4 1.01
1024 28.9 28.3 1.02
1536 30.0 29.3 1.02
2048 30.5 29.8 1.02
3072 31.1 30.3 1.03
4096 31.4 30.6 1.03
6144 31.7 30.9 1.03
8192 31.9 31.0 1.03
10000 31.9 31.0 1.03
12288 32.0 30.9 1.03
16384 32.0 29.3 1.09
32768 23.6 19.6 1.21
65536 23.8 19.1 1.25
100000 23.8 19.8 1.20
131072 23.8 19.6 1.21
262144 23.8 19.7 1.21
524288 23.7 19.8 1.20
1000000 20.8 16.9 1.23
1048576 23.6 19.2 1.23
2097152 23.5 19.8 1.18
4194304 18.4 19.9 0.96
8388608 18.3 18.2 1.01
16777216 16.6 16.8 0.99
AXPY double
n Eigen GFLOP/s OpenBLAS GFLOP/s Eigen ÷ OpenBLAS
2 6.1 1.3 4.54
3 7.8 1.9 4.21
4 10.8 1.9 5.77
6 12.1 2.2 5.41
8 12.9 2.8 4.61
12 13.9 3.7 3.78
16 9.2 4.4 2.07
24 9.9 4.6 2.16
32 11.5 8.7 1.52
48 13.6 9.4 1.44
64 14.0 9.0 1.56
96 14.6 13.3 1.10
100 14.7 13.1 1.13
128 15.0 14.8 1.01
192 15.4 16.6 0.80
256 13.8 17.7 0.78
384 14.0 19.1 0.73
512 14.4 20.0 0.72
768 14.9 21.0 0.71
1000 15.2 21.4 0.71
1001 15.2 21.5 0.71
1024 15.2 21.5 0.71
1536 15.5 22.1 0.70
2048 15.7 22.4 0.70
3072 15.8 18.6 0.85
4096 15.9 12.9 1.23
6144 16.0 18.8 0.85
8192 16.0 18.1 0.89
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.2 1.07
100000 11.9 11.1 1.07
131072 11.9 11.2 1.07
262144 11.9 11.2 1.06
524288 11.8 10.8 1.09
1000000 11.8 11.1 1.06
1048576 11.7 11.1 1.06
2097152 9.2 9.4 0.99
4194304 9.2 9.0 1.02
8388608 8.3 8.4 0.98
16777216 7.9 8.0 1.00
DOT float
n Eigen GFLOP/s OpenBLAS GFLOP/s Eigen ÷ OpenBLAS
2 6.4 0.3 20.38
3 8.1 0.5 17.09
4 11.2 0.6 18.17
6 12.2 0.9 13.69
8 21.8 1.1 19.18
12 32.3 1.6 20.17
16 26.1 1.9 13.53
24 38.8 2.6 15.07
32 45.3 3.1 14.60
48 46.5 3.4 13.56
64 46.8 9.3 5.03
96 45.9 8.5 5.37
100 45.8 8.1 5.67
128 46.6 15.9 2.93
192 46.7 19.5 2.40
256 46.7 23.4 1.99
384 46.7 27.5 1.70
512 46.6 29.9 1.56
768 46.1 32.3 1.43
1000 44.8 28.0 1.60
1001 44.4 27.7 1.60
1024 45.0 33.6 1.34
1536 43.2 35.1 1.23
2048 41.7 14.7 2.85
3072 39.8 36.5 1.09
4096 38.8 21.0 1.85
6144 37.8 24.5 1.55
8192 37.4 26.4 1.42
10000 36.9 36.9 1.00
12288 36.9 37.6 0.98
16384 36.5 36.5 0.99
32768 30.4 25.6 1.18
65536 30.5 26.4 1.15
100000 30.4 27.3 1.11
131072 30.5 27.0 1.13
262144 30.5 27.2 1.10
524288 29.5 27.2 1.09
1000000 26.5 23.9 1.11
1048576 29.7 27.2 1.09
2097152 29.0 26.7 1.04
4194304 19.2 24.1 0.98
8388608 19.1 18.5 1.03
16777216 18.7 18.3 1.02
DOT double
n Eigen GFLOP/s OpenBLAS GFLOP/s Eigen ÷ OpenBLAS
2 8.2 0.3 25.91
3 9.7 0.5 20.65
4 13.0 0.6 20.73
6 16.2 0.9 18.02
8 16.2 1.1 14.28
12 19.4 1.5 12.51
16 23.6 2.0 11.68
24 23.2 2.6 5.48
32 23.4 4.7 4.98
48 22.9 5.4 4.23
64 23.3 7.7 3.01
96 23.4 10.1 2.32
100 23.2 10.2 2.28
128 23.4 11.7 1.99
192 23.4 13.9 1.68
256 23.3 14.8 1.57
384 23.1 16.0 1.44
512 22.7 16.7 1.36
768 21.7 17.4 1.25
1000 20.9 17.5 1.19
1001 20.9 17.5 1.20
1024 20.9 17.8 1.18
1536 19.9 18.1 1.10
2048 19.4 7.1 2.75
3072 18.9 18.6 1.02
4096 18.7 10.3 1.82
6144 18.4 15.2 1.22
8192 18.3 15.6 1.18
10000 16.2 15.2 1.06
12288 15.3 12.8 1.18
16384 15.2 12.8 1.18
32768 15.3 13.2 1.15
65536 15.2 13.5 1.13
100000 15.2 13.7 1.11
131072 15.2 13.6 1.10
262144 14.8 13.6 1.09
524288 14.9 13.6 1.10
1000000 14.5 13.3 1.08
1048576 14.5 13.2 1.10
2097152 9.4 11.3 0.86
4194304 9.5 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.30
3x3 2.7 1.0 2.67
4x4 5.5 1.8 3.13
6x6 10.0 3.7 2.76
8x8 17.7 6.1 2.96
12x12 29.8 11.7 2.57
16x16 40.4 19.0 2.13
24x24 49.5 28.4 1.74
32x32 66.2 37.7 1.76
48x48 58.0 50.6 1.15
64x64 74.3 58.7 1.26
96x96 73.6 69.1 1.04
100x100 58.2 69.2 0.82
128x128 71.5 69.3 1.03
192x192 59.6 46.3 1.30
200x200 57.4 47.7 1.20
256x256 47.3 46.0 1.03
257x257 41.1 40.9 1.01
384x384 44.4 46.1 0.97
500x500 51.1 45.9 1.11
512x512 48.3 46.4 1.04
768x768 47.8 47.0 1.02
1000x1000 50.1 47.4 1.05
1001x1001 46.5 43.9 1.06
1024x1024 48.8 44.0 1.11
1536x1536 48.4 44.7 1.08
2048x2048 42.3 41.8 1.01
3072x3072 28.1 25.3 1.10
4096x4096 24.8 28.4 0.89
4097x4097 17.4 26.0 0.67
8x10000 37.6 10.8 3.48
100x10000 43.6 50.3 0.87
1000x10000 21.6 27.4 0.79
4000x10000 25.5 23.4 1.09
10000x8 48.5 42.4 1.12
10000x100 43.8 41.8 1.05
10000x1000 34.9 32.7 1.06
10000x4000 30.8 28.1 1.10
GEMV double
m×n Eigen GFLOP/s OpenBLAS GFLOP/s Eigen ÷ OpenBLAS
2x2 1.9 0.4 4.44
3x3 3.0 0.9 3.48
4x4 5.6 1.5 3.74
6x6 11.6 2.2 5.19
8x8 17.5 4.2 4.18
12x12 21.3 6.0 3.56
16x16 28.7 7.6 3.77
24x24 31.1 9.7 3.19
32x32 35.6 12.5 2.85
48x48 37.5 17.1 2.20
64x64 36.6 12.8 2.85
96x96 35.3 18.0 1.97
100x100 31.5 18.1 1.77
128x128 35.5 16.5 2.14
192x192 21.8 16.6 1.31
200x200 22.7 17.1 1.31
256x256 23.9 16.5 1.45
257x257 23.0 16.0 1.44
384x384 23.3 16.7 1.38
500x500 24.7 16.9 1.46
512x512 24.1 17.1 1.41
768x768 24.0 16.7 1.44
1000x1000 25.1 16.9 1.47
1001x1001 24.3 16.1 1.50
1024x1024 22.5 16.8 1.35
1536x1536 21.6 16.6 1.30
2048x2048 13.6 16.5 0.82
3072x3072 14.7 16.3 0.90
4096x4096 11.9 16.2 0.74
4097x4097 10.1 15.7 0.64
8x10000 23.0 4.3 5.29
100x10000 20.5 16.5 1.24
1000x10000 10.8 16.3 0.67
4000x10000 14.3 16.1 0.89
10000x8 24.4 11.4 2.14
10000x100 20.7 11.3 1.81
10000x1000 17.0 11.0 1.54
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.59
3x3x3 4.2 1.5 2.54
4x4x4 14.5 4.0 3.68
6x6x6 11.8 9.0 1.27
8x8x8 23.7 21.3 1.11
12x12x12 47.4 43.6 1.09
16x16x16 58.4 68.2 0.86
24x24x24 80.9 79.7 1.02
32x32x32 92.6 96.9 0.96
48x48x48 102.7 104.8 0.98
64x64x64 105.1 106.6 0.99
96x96x96 109.9 109.1 1.01
100x100x100 106.4 101.5 1.05
128x128x128 111.2 109.7 1.01
160x160x160 111.9 109.8 1.02
192x192x192 117.1 92.6 1.26
200x200x200 116.6 108.0 1.08
224x224x224 117.5 111.1 1.06
256x256x256 116.8 110.9 1.05
257x257x257 112.8 104.5 1.08
288x288x288 119.9 112.0 1.07
320x320x320 120.3 112.1 1.07
384x384x384 121.1 107.4 1.13
448x448x448 121.1 113.0 1.07
500x500x500 122.0 111.4 1.09
512x512x512 122.3 113.2 1.08
768x768x768 123.6 113.6 1.09
1000x1000x1000 123.8 113.1 1.09
1001x1001x1001 122.4 111.4 1.10
1024x1024x1024 123.8 113.7 1.09
1536x1536x1536 124.2 113.9 1.09
2048x2048x2048 123.9 113.5 1.09
3072x3072x3072 124.6 113.5 1.10
4096x4096x4096 124.4 113.9 1.09
4097x4097x4097 124.0 113.1 1.10
64x64x1024 101.6 100.5 1.01
64x1024x64 102.4 109.6 0.93
256x256x1024 118.6 110.4 1.07
1024x64x64 102.7 107.2 0.96
1024x256x256 118.9 112.5 1.06
4096x96x96 109.2 109.5 1.00
4096x128x128 113.2 110.4 1.02
4096x144x144 114.7 111.3 1.03
4096x160x160 115.8 111.7 1.04
4096x176x176 116.6 112.0 1.04
8192x128x128 113.4 110.6 1.02
10000x8x8 70.0 73.6 0.95
10000x100x100 112.8 111.1 1.01
10000x1000x1000 124.1 113.3 1.09
10000x4000x4000 124.9 113.8 1.10
GEMM double
m×n×k Eigen GFLOP/s OpenBLAS GFLOP/s Eigen ÷ OpenBLAS
2x2x2 5.0 0.6 8.20
3x3x3 5.1 1.8 2.93
4x4x4 9.9 4.3 2.31
6x6x6 12.0 9.4 1.28
8x8x8 16.8 18.0 0.93
12x12x12 27.2 31.4 0.87
16x16x16 35.0 38.9 0.90
24x24x24 42.2 46.6 0.91
32x32x32 45.6 49.8 0.92
48x48x48 51.4 52.1 0.99
64x64x64 52.4 29.7 1.77
96x96x96 53.1 53.2 0.99
100x100x100 52.8 52.6 1.00
128x128x128 55.0 44.1 1.25
160x160x160 56.9 54.6 1.04
192x192x192 58.3 49.9 1.17
200x200x200 58.0 55.2 1.05
224x224x224 58.5 55.4 1.05
256x256x256 58.9 52.6 1.12
257x257x257 57.9 53.7 1.08
288x288x288 59.8 55.9 1.07
320x320x320 59.5 56.1 1.06
384x384x384 60.3 53.5 1.13
448x448x448 60.6 56.5 1.07
500x500x500 60.7 56.4 1.08
512x512x512 60.5 56.4 1.07
768x768x768 61.6 56.9 1.08
1000x1000x1000 61.5 56.9 1.08
1001x1001x1001 61.2 56.3 1.09
1024x1024x1024 61.3 56.9 1.08
1536x1536x1536 61.5 56.8 1.08
2048x2048x2048 61.4 56.9 1.08
3072x3072x3072 61.7 56.7 1.09
4096x4096x4096 61.8 57.1 1.08
4097x4097x4097 61.8 56.7 1.09
64x64x1024 53.1 49.8 1.07
64x1024x64 52.5 54.5 0.96
256x256x1024 59.9 55.5 1.08
1024x64x64 51.1 53.3 0.96
1024x256x256 59.4 56.2 1.06
4096x96x96 54.6 54.5 1.00
4096x128x128 56.4 55.0 1.02
4096x144x144 57.0 55.5 1.03
4096x160x160 57.5 55.7 1.03
4096x176x176 58.0 55.8 1.04
8192x128x128 56.4 55.0 1.02
10000x8x8 34.6 36.0 0.96
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.4 1.11
3x3 1.1 0.7 1.57
4x4 6.2 1.1 5.90
6x6 6.9 2.2 3.21
8x8 20.4 3.6 5.63
12x12 28.5 5.7 5.03
16x16 46.5 5.6 8.30
24x24 56.7 9.1 6.27
32x32 67.5 10.7 6.29
48x48 77.9 15.7 4.98
64x64 84.9 12.6 6.71
96x96 93.3 27.5 3.38
100x100 91.1 27.2 3.35
128x128 95.8 33.6 2.85
192x192 94.8 40.3 2.35
200x200 93.5 44.5 2.10
256x256 99.7 51.6 1.93
257x257 94.6 49.4 1.91
384x384 104.9 60.6 1.73
500x500 108.7 68.8 1.58
512x512 109.3 71.0 1.54
768x768 113.0 80.9 1.40
1000x1000 115.5 86.3 1.34
1001x1001 113.4 84.3 1.34
1024x1024 115.0 87.2 1.32
1536x1536 117.1 94.5 1.24
2048x2048 117.4 98.2 1.19
3072x3072 119.7 102.3 1.17
4096x4096 119.8 105.4 1.14
4097x4097 118.8 104.3 1.14
64x4096 82.3 20.2 4.06
256x4096 100.4 52.6 1.90
1024x8 65.2 38.2 1.70
1024x64 105.8 76.1 1.39
1024x256 113.1 85.0 1.33
1024x4096 114.6 87.2 1.31
4096x8 42.1 41.7 1.01
4096x64 98.9 88.0 1.12
4096x256 114.4 100.9 1.13
4096x1024 119.0 104.6 1.14
TRSM double
m×n Eigen GFLOP/s OpenBLAS GFLOP/s Eigen ÷ OpenBLAS
2x2 0.5 0.5 0.99
3x3 1.2 0.9 1.24
4x4 4.8 1.7 2.91
6x6 6.8 2.8 2.41
8x8 14.8 3.9 3.79
12x12 20.6 6.3 3.26
16x16 24.9 7.9 3.07
24x24 30.4 10.9 2.80
32x32 34.2 13.3 2.57
48x48 39.3 18.0 2.18
64x64 42.7 14.0 3.02
96x96 45.0 26.8 1.67
100x100 45.2 26.3 1.71
128x128 47.5 25.8 1.83
192x192 47.8 32.7 1.46
200x200 48.0 36.7 1.31
256x256 49.9 37.2 1.34
257x257 47.5 38.5 1.24
384x384 53.4 44.2 1.21
500x500 54.7 46.1 1.18
512x512 53.9 46.8 1.15
768x768 56.2 49.8 1.13
1000x1000 57.7 51.4 1.12
1001x1001 57.0 50.7 1.13
1024x1024 56.8 51.4 1.11
1536x1536 58.3 52.6 1.11
2048x2048 58.2 53.6 1.08
3072x3072 58.7 54.4 1.08
4096x4096 59.6 55.3 1.08
4097x4097 58.9 54.9 1.07
64x4096 41.2 21.4 1.92
256x4096 50.3 40.1 1.25
1024x8 31.9 31.6 1.00
1024x64 52.2 47.8 1.09
1024x256 56.1 50.8 1.11
1024x4096 56.5 50.9 1.11
4096x8 25.2 25.3 1.00
4096x64 51.0 48.3 1.06
4096x256 57.6 53.4 1.08
4096x1024 59.2 54.9 1.08
TRMM float
m×n Eigen GFLOP/s OpenBLAS GFLOP/s Eigen ÷ OpenBLAS
2x2 0.3 0.5 0.46
3x3 0.6 1.4 0.42
4x4 1.5 3.1 0.48
6x6 3.1 5.8 0.54
8x8 7.0 11.3 0.62
12x12 14.6 25.2 0.58
16x16 19.8 29.4 0.67
24x24 33.0 41.7 0.78
32x32 44.3 50.1 0.88
48x48 56.2 63.1 0.88
64x64 64.8 69.1 0.93
96x96 73.8 78.2 0.94
100x100 74.1 73.3 1.01
128x128 77.4 83.1 0.93
192x192 85.0 70.2 1.21
200x200 85.7 88.9 0.96
256x256 88.7 96.4 0.92
257x257 84.9 90.8 0.93
384x384 94.0 93.3 1.01
500x500 102.9 100.7 1.02
512x512 103.8 96.1 1.08
768x768 106.7 107.1 1.00
1000x1000 111.1 107.7 1.03
1001x1001 110.3 104.8 1.05
1024x1024 111.0 109.3 1.01
1536x1536 113.5 110.7 1.02
2048x2048 114.9 110.7 1.04
3072x3072 117.1 111.4 1.05
4096x4096 116.8 112.3 1.04
4097x4097 116.5 111.0 1.05
64x4096 66.5 70.1 0.94
256x4096 90.7 99.4 0.91
1024x8 62.3 49.2 1.27
1024x64 101.1 95.8 1.05
1024x256 108.6 106.3 1.02
1024x4096 108.4 109.1 0.99
4096x8 46.1 45.5 1.02
4096x64 98.4 94.1 1.04
4096x256 112.0 107.5 1.04
4096x1024 116.1 111.4 1.04
TRMM double
m×n Eigen GFLOP/s OpenBLAS GFLOP/s Eigen ÷ OpenBLAS
2x2 0.3 0.6 0.45
3x3 0.6 1.4 0.45
4x4 1.5 3.1 0.47
6x6 3.3 6.1 0.54
8x8 5.7 10.2 0.56
12x12 10.4 16.9 0.62
16x16 14.5 21.7 0.67
24x24 21.1 27.9 0.76
32x32 25.4 32.4 0.78
48x48 31.1 37.7 0.82
64x64 33.8 18.1 1.86
96x96 35.5 42.7 0.83
100x100 36.1 42.1 0.86
128x128 37.7 33.8 1.11
192x192 41.1 41.2 1.00
200x200 41.7 48.4 0.86
256x256 42.5 45.5 0.93
257x257 41.2 48.1 0.86
384x384 49.1 52.2 0.94
500x500 50.2 52.7 0.95
512x512 50.1 53.4 0.94
768x768 53.5 54.8 0.98
1000x1000 54.8 55.2 0.99
1001x1001 54.4 54.8 0.99
1024x1024 53.0 55.3 0.96
1536x1536 56.0 55.4 1.01
2048x2048 54.7 55.8 0.98
3072x3072 56.2 56.0 1.00
4096x4096 57.2 56.5 1.01
4097x4097 57.6 55.8 1.03
64x4096 35.3 41.4 0.85
256x4096 40.7 50.9 0.80
1024x8 30.7 31.2 0.98
1024x64 49.7 50.7 0.98
1024x256 52.6 54.4 0.97
1024x4096 51.2 54.7 0.93
4096x8 25.0 24.6 1.02
4096x64 49.6 48.7 1.02
4096x256 55.8 54.5 1.02
4096x1024 57.3 56.0 1.02
SYMM float
m×n Eigen GFLOP/s OpenBLAS GFLOP/s Eigen ÷ OpenBLAS
2x2 0.6 0.8 0.70
3x3 1.2 2.2 0.53
4x4 3.7 1.7 2.19
6x6 6.3 10.5 0.61
8x8 18.2 21.7 0.84
12x12 34.1 37.9 0.89
16x16 44.8 54.0 0.82
24x24 65.6 64.5 1.01
32x32 79.2 78.5 1.01
48x48 93.9 89.2 1.05
64x64 93.0 58.7 1.58
96x96 107.8 100.7 1.07
100x100 102.0 94.4 1.08
128x128 110.0 103.5 1.06
192x192 116.2 89.5 1.30
200x200 112.6 104.6 1.08
256x256 114.5 108.8 1.05
257x257 110.7 103.0 1.08
384x384 120.9 105.2 1.15
500x500 120.1 110.0 1.09
512x512 120.5 111.9 1.08
768x768 122.5 112.6 1.09
1000x1000 123.8 112.4 1.10
1001x1001 122.5 110.7 1.11
1024x1024 123.8 113.1 1.10
1536x1536 124.0 113.6 1.09
2048x2048 123.9 113.2 1.09
3072x3072 122.7 113.1 1.09
4096x4096 122.0 113.4 1.08
4097x4097 122.8 112.7 1.09
64x4096 104.0 110.0 0.95
256x4096 119.5 113.1 1.06
1024x8 67.5 45.9 1.47
1024x64 111.6 96.9 1.15
1024x256 119.9 109.4 1.10
1024x4096 122.1 113.4 1.08
4096x8 46.9 28.0 1.67
4096x64 102.7 82.1 1.25
4096x256 118.5 104.2 1.14
4096x1024 123.1 111.6 1.10
SYMM double
m×n Eigen GFLOP/s OpenBLAS GFLOP/s Eigen ÷ OpenBLAS
2x2 0.6 0.8 0.72
3x3 1.3 2.1 0.60
4x4 3.6 4.9 0.74
6x6 8.0 9.8 0.80
8x8 13.0 18.9 0.67
12x12 23.6 28.2 0.83
16x16 30.6 34.5 0.88
24x24 38.7 41.7 0.93
32x32 42.5 44.3 0.96
48x48 49.3 48.8 1.01
64x64 48.5 28.8 1.68
96x96 53.6 52.1 1.03
100x100 53.1 51.7 1.02
128x128 52.7 43.7 1.21
192x192 57.9 49.7 1.16
200x200 56.2 54.9 1.02
256x256 57.4 52.4 1.10
257x257 56.5 53.9 1.05
384x384 60.3 53.3 1.13
500x500 59.9 56.4 1.06
512x512 60.0 56.5 1.06
768x768 61.5 56.9 1.08
1000x1000 61.5 56.8 1.08
1001x1001 61.0 56.5 1.08
1024x1024 61.2 56.9 1.08
1536x1536 61.3 56.8 1.08
2048x2048 60.9 56.8 1.07
3072x3072 60.2 56.6 1.06
4096x4096 60.1 57.0 1.05
4097x4097 61.0 56.7 1.07
64x4096 55.4 54.7 1.01
256x4096 60.2 56.6 1.06
1024x8 32.8 32.7 1.00
1024x64 55.0 52.4 1.05
1024x256 59.3 56.0 1.06
1024x4096 61.1 56.8 1.07
4096x8 22.3 19.4 1.15
4096x64 50.2 45.8 1.10
4096x256 58.6 53.9 1.08
4096x1024 61.1 56.4 1.08
SYRK float
n×k Eigen GFLOP/s OpenBLAS GFLOP/s Eigen ÷ OpenBLAS
2x2 0.2 0.4 0.49
3x3 0.5 1.0 0.44
4x4 1.2 2.2 0.54
6x6 2.8 4.7 0.59
8x8 7.0 8.4 0.83
12x12 10.9 13.3 0.82
16x16 20.3 18.6 1.10
24x24 33.6 34.3 0.98
32x32 46.7 44.5 1.05
48x48 61.8 62.8 0.98
64x64 74.3 71.3 1.04
96x96 85.2 85.5 1.00
100x100 86.7 77.9 1.12
128x128 89.1 88.9 1.00
192x192 100.4 72.3 1.39
200x200 100.1 93.4 1.07
256x256 102.9 97.8 1.05
257x257 101.3 92.0 1.10
384x384 110.2 96.0 1.15
500x500 113.3 104.2 1.09
512x512 113.5 99.4 1.14
768x768 117.7 108.3 1.09
1000x1000 118.9 109.8 1.08
1001x1001 117.7 107.0 1.10
1024x1024 118.6 105.8 1.12
1536x1536 121.2 111.7 1.08
2048x2048 121.1 109.7 1.10
3072x3072 121.8 111.0 1.10
4096x4096 121.0 111.7 1.08
4097x4097 121.1 111.2 1.09
64x4096 67.9 51.3 1.32
256x4096 102.9 85.1 1.21
1024x4096 117.8 105.6 1.12
4096x8 58.9 58.5 1.00
4096x64 112.7 113.3 0.99
4096x256 121.2 113.7 1.07
4096x1024 121.0 111.9 1.08
SYRK double
n×k Eigen GFLOP/s OpenBLAS GFLOP/s Eigen ÷ OpenBLAS
2x2 0.1 0.3 0.44
3x3 0.4 0.9 0.42
4x4 0.9 2.0 0.47
6x6 2.5 4.3 0.57
8x8 4.6 7.2 0.64
12x12 7.6 14.6 0.52
16x16 13.1 18.1 0.72
24x24 18.2 26.8 0.68
32x32 23.8 33.1 0.72
48x48 31.0 41.1 0.75
64x64 36.0 20.0 1.79
96x96 40.0 45.6 0.88
100x100 41.3 44.7 0.92
128x128 43.8 34.4 1.27
192x192 48.9 42.5 1.15
200x200 48.8 51.0 0.96
256x256 50.6 45.3 1.12
257x257 50.5 49.4 1.02
384x384 54.7 50.0 1.09
500x500 56.3 54.4 1.04
512x512 56.4 50.6 1.11
768x768 58.3 55.5 1.05
1000x1000 59.2 56.1 1.05
1001x1001 58.9 55.5 1.06
1024x1024 58.8 53.9 1.09
1536x1536 59.4 54.9 1.08
2048x2048 58.5 55.4 1.06
3072x3072 58.8 55.7 1.06
4096x4096 59.2 56.3 1.05
4097x4097 59.8 56.0 1.07
64x4096 35.2 27.6 1.28
256x4096 52.3 45.1 1.16
1024x4096 57.2 53.5 1.07
4096x8 37.6 24.1 1.56
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.4 0.1 3.83
3 0.6 0.3 2.33
4 1.0 0.5 2.21
6 1.5 0.9 1.60
8 2.1 1.5 1.45
12 3.7 2.3 1.54
16 5.4 3.0 1.77
24 9.0 3.8 2.38
32 12.7 4.1 3.08
48 19.8 12.1 1.62
64 21.5 16.4 1.31
96 30.9 22.9 1.34
100 31.1 22.2 1.40
128 38.6 27.1 1.42
192 49.6 46.7 1.06
200 50.6 45.0 1.12
256 65.0 55.8 1.16
257 61.3 53.4 1.15
384 78.1 68.7 1.14
500 83.9 68.6 1.22
512 85.1 68.6 1.24
768 95.5 84.4 1.13
1000 100.5 89.0 1.13
1001 98.8 86.9 1.14
1024 95.3 89.2 1.07
1536 105.9 97.2 1.09
2048 107.0 100.4 1.07
3072 112.1 105.4 1.06
4096 112.2 105.8 1.06
4097 110.8 105.1 1.05
POTRF double
n Eigen GFLOP/s OpenBLAS GFLOP/s Eigen ÷ OpenBLAS
2 0.5 0.1 4.10
3 0.8 0.3 3.03
4 1.1 0.5 2.29
6 1.6 0.9 1.79
8 2.3 1.3 1.75
12 3.9 2.1 1.85
16 5.7 2.8 2.00
24 9.0 4.0 2.22
32 11.9 4.3 2.76
48 14.9 10.7 1.38
64 14.9 14.1 1.05
96 19.3 18.6 1.03
100 19.1 18.7 1.02
128 22.7 21.7 1.04
192 28.0 32.0 0.87
200 28.3 31.4 0.90
256 34.2 29.8 1.14
257 33.2 34.7 0.95
384 40.0 38.2 1.05
500 42.7 42.1 1.01
512 42.4 40.1 1.05
768 48.0 45.8 1.05
1000 51.1 49.4 1.03
1001 50.7 48.6 1.04
1024 48.1 46.8 1.03
1536 52.6 50.7 1.04
2048 52.8 51.4 1.03
3072 55.9 53.1 1.05
4096 56.5 54.1 1.04
4097 56.3 53.8 1.04
PSTRF float
n Eigen GFLOP/s OpenBLAS GFLOP/s Eigen ÷ OpenBLAS
2 0.2 0.1 1.95
3 0.4 0.2 1.72
4 0.4 0.3 1.36
6 0.7 0.5 1.22
8 1.0 0.7 1.36
12 1.8 1.2 1.41
16 2.5 1.6 1.53
24 4.2 2.4 1.77
32 6.2 3.0 2.06
48 10.1 4.2 2.30
64 12.8 4.8 2.62
96 19.7 6.9 2.86
100 23.0 7.2 3.17
128 28.8 7.8 3.66
192 39.6 10.9 3.53
200 40.9 12.2 3.27
256 43.3 13.7 3.14
257 45.0 15.0 2.93
384 55.2 19.5 2.80
500 63.1 25.5 2.47
512 53.7 19.2 2.79
768 72.1 29.7 2.42
1000 80.4 41.1 1.95
1001 79.2 40.8 1.94
1024 65.8 29.8 2.19
1536 81.0 41.3 1.96
2048 73.8 43.6 1.69
3072 86.8 56.0 1.55
4096 69.8 54.9 1.28
4097 75.7 59.7 1.27
PSTRF double
n Eigen GFLOP/s OpenBLAS GFLOP/s Eigen ÷ OpenBLAS
2 0.2 0.1 1.58
3 0.4 0.2 1.57
4 0.5 0.3 1.55
6 0.8 0.5 1.49
8 1.1 0.7 1.53
12 1.8 1.1 1.70
16 2.6 1.4 1.76
24 4.3 2.2 1.92
32 5.7 3.0 1.93
48 9.0 4.5 2.02
64 11.0 5.9 1.88
96 14.7 8.9 1.65
100 16.4 10.7 1.53
128 18.6 11.0 1.69
192 22.8 15.0 1.53
200 23.8 17.8 1.34
256 23.3 13.2 1.77
257 25.7 19.1 1.34
384 30.2 20.4 1.49
500 34.1 27.3 1.25
512 29.6 18.2 1.63
768 36.3 24.7 1.47
1000 41.5 34.0 1.22
1001 41.2 33.1 1.25
1024 33.7 24.7 1.37
1536 40.8 31.1 1.31
2048 33.7 29.9 1.13
3072 42.1 35.2 1.19
4096 39.8 35.5 1.12
4097 43.5 38.1 1.14
SYTRF float
n Eigen GFLOP/s OpenBLAS GFLOP/s Eigen ÷ OpenBLAS
2 0.2 0.1 1.98
3 0.5 0.3 1.35
4 0.8 0.6 1.38
6 1.2 0.8 1.59
8 1.7 1.2 1.45
12 3.0 2.2 1.32
16 4.2 3.1 1.43
24 6.8 5.0 1.39
32 8.7 6.2 1.42
48 12.8 8.2 1.57
64 16.0 9.7 1.65
96 22.7 4.9 4.60
100 23.9 5.2 4.66
128 28.2 5.4 5.23
192 37.6 6.8 5.57
200 41.1 7.4 5.57
256 36.9 8.6 4.27
257 46.0 9.0 5.11
384 53.0 12.3 4.27
500 65.6 15.6 4.20
512 43.7 15.2 2.88
768 64.7 21.3 3.03
1000 78.5 26.6 2.95
1001 78.3 26.7 2.93
1024 52.4 25.7 2.04
1536 72.2 35.2 2.05
2048 66.3 40.3 1.64
3072 82.2 50.1 1.64
4096 71.8 55.2 1.30
4097 79.0 56.4 1.40
SYTRF double
n Eigen GFLOP/s OpenBLAS GFLOP/s Eigen ÷ OpenBLAS
2 0.2 0.1 1.77
3 0.5 0.3 1.66
4 0.8 0.5 1.52
6 1.2 0.9 1.14
8 1.8 1.2 1.48
12 2.8 2.1 1.37
16 4.1 2.8 1.51
24 6.2 4.2 1.55
32 7.9 4.9 1.62
48 10.1 6.8 1.49
64 11.5 8.3 1.40
96 15.2 7.9 1.92
100 15.9 7.9 2.00
128 17.5 9.1 1.95
192 22.2 11.3 1.96
200 23.9 12.3 1.94
256 18.9 13.0 1.43
257 25.5 14.3 1.78
384 27.6 17.8 1.55
500 33.5 20.8 1.61
512 21.2 17.6 1.20
768 31.8 25.0 1.27
1000 40.3 29.0 1.40
1001 40.4 29.1 1.39
1024 27.9 24.6 1.13
1536 37.0 31.1 1.19
2048 31.9 31.2 1.03
3072 41.8 36.5 1.14
4096 40.7 36.9 1.10
4097 44.3 38.6 1.15
GETRF float
n Eigen GFLOP/s OpenBLAS GFLOP/s Eigen ÷ OpenBLAS
2 0.2 0.3 0.68
3 0.5 0.4 1.11
4 0.7 0.6 1.23
6 1.3 0.7 1.75
8 2.1 0.9 2.39
12 3.9 1.2 3.28
16 5.7 1.5 3.81
24 8.4 3.5 2.50
32 11.9 4.2 2.82
48 18.9 8.5 2.25
64 25.2 9.6 2.60
96 36.8 19.0 1.94
100 38.1 19.3 1.93
128 43.0 23.4 1.83
192 51.9 35.2 1.47
200 52.6 35.8 1.47
256 63.8 43.5 1.47
257 61.4 41.8 1.47
384 76.5 55.3 1.38
500 81.4 63.4 1.28
512 83.1 65.3 1.27
768 93.2 76.3 1.22
1000 98.0 82.2 1.19
1001 96.5 80.5 1.20
1024 96.7 84.1 1.15
1536 104.2 92.6 1.12
2048 106.9 96.3 1.11
3072 109.2 100.8 1.08
4096 107.9 103.4 1.04
4097 107.4 102.6 1.05
GETRF double
n Eigen GFLOP/s OpenBLAS GFLOP/s Eigen ÷ OpenBLAS
2 0.3 0.2 1.40
3 0.5 0.4 1.45
4 0.7 0.4 1.48
6 1.3 0.6 2.06
8 2.0 0.7 2.68
12 3.8 1.0 3.81
16 5.3 1.3 4.11
24 6.9 2.9 2.36
32 9.1 3.8 2.42
48 13.6 8.0 1.70
64 17.4 10.1 1.70
96 23.3 17.1 1.34
100 23.8 17.1 1.35
128 24.6 18.3 1.32
192 28.6 28.7 0.99
200 29.0 28.6 1.00
256 35.1 30.8 1.13
257 34.2 31.3 1.08
384 40.9 38.0 1.07
500 43.2 41.3 1.04
512 43.7 41.2 1.05
768 48.4 46.1 1.05
1000 50.8 48.0 1.06
1001 50.3 47.4 1.06
1024 49.8 48.1 1.03
1536 52.6 50.6 1.04
2048 51.6 51.3 1.00
3072 54.1 52.7 1.02
4096 54.7 53.7 1.02
4097 54.1 53.4 1.01
GEQRF float
m×n Eigen GFLOP/s OpenBLAS GFLOP/s Eigen ÷ OpenBLAS
2x2 0.2 0.2 1.25
3x3 0.4 0.3 1.29
4x4 0.6 0.5 1.31
6x6 1.2 0.9 1.43
8x8 1.9 1.3 1.47
12x12 4.0 2.6 1.52
16x16 6.1 3.9 1.58
24x24 10.4 6.7 1.55
32x32 14.0 9.2 1.53
48x48 20.0 13.5 1.48
64x64 23.0 12.4 1.86
96x96 34.8 20.3 1.71
100x100 34.7 20.5 1.70
128x128 43.7 23.7 1.85
192x192 55.9 36.6 1.53
200x200 55.9 43.3 1.29
256x256 63.2 46.2 1.37
257x257 59.7 52.1 1.15
384x384 74.0 61.9 1.19
500x500 78.5 72.2 1.09
512x512 79.5 64.1 1.24
768x768 88.6 75.3 1.18
1000x1000 92.5 87.5 1.06
1001x1001 90.9 86.0 1.06
1024x1024 92.1 77.3 1.19
1536x1536 99.0 87.3 1.13
2048x2048 101.1 84.8 1.19
3072x3072 103.0 91.0 1.13
4096x4096 103.0 84.0 1.23
4097x4097 101.9 84.7 1.20
4096x8 21.8 10.3 2.09
4096x64 47.5 21.2 2.25
4096x256 69.1 44.4 1.56
4096x1024 89.9 78.1 1.15
10000x8 21.7 10.1 2.15
10000x100 54.4 23.0 2.36
10000x1000 92.2 83.3 1.11
10000x4000 103.3 88.1 1.17
100000x8 20.3 9.4 2.15
100000x64 49.9 19.1 2.61
100000x256 67.5 41.6 1.62
GEQRF double
m×n Eigen GFLOP/s OpenBLAS GFLOP/s Eigen ÷ OpenBLAS
2x2 0.2 0.2 1.31
3x3 0.4 0.3 1.38
4x4 0.7 0.5 1.42
6x6 1.3 0.8 1.53
8x8 2.0 1.3 1.55
12x12 3.8 2.3 1.67
16x16 5.6 3.2 1.76
24x24 8.4 4.7 1.78
32x32 10.3 5.9 1.75
48x48 13.2 9.1 1.44
64x64 14.7 9.9 1.48
96x96 21.8 12.9 1.68
100x100 21.9 13.0 1.68
128x128 25.8 13.8 1.86
192x192 30.8 21.4 1.44
200x200 30.4 25.7 1.18
256x256 33.5 25.4 1.32
257x257 32.5 30.0 1.08
384x384 38.0 33.5 1.14
500x500 39.9 39.5 1.01
512x512 40.2 35.5 1.13
768x768 43.9 41.3 1.06
1000x1000 46.0 45.7 1.01
1001x1001 45.6 45.1 1.01
1024x1024 45.1 41.3 1.09
1536x1536 48.7 46.0 1.06
2048x2048 48.3 44.0 1.10
3072x3072 50.8 44.7 1.14
4096x4096 51.0 45.1 1.13
4097x4097 50.7 43.7 1.16
4096x8 10.9 7.4 1.47
4096x64 23.1 12.4 1.86
4096x256 35.0 24.9 1.40
4096x1024 44.8 41.6 1.07
10000x8 10.6 7.1 1.51
10000x100 27.7 12.4 2.24
10000x1000 44.8 41.7 1.07
10000x4000 51.7 44.0 1.18
100000x8 10.2 6.7 1.51
100000x64 22.9 10.6 2.16
100000x256 33.2 22.3 1.49
GELS float
m×n×nrhs Eigen GFLOP/s OpenBLAS GFLOP/s Eigen ÷ OpenBLAS
2x2x1 0.2 0.1 1.53
3x3x1 0.3 0.2 1.52
4x4x1 0.5 0.3 1.60
6x6x1 1.0 0.6 1.73
8x8x1 1.6 0.9 1.81
12x12x1 3.2 1.7 1.88
16x16x1 4.8 2.3 2.12
24x24x1 8.6 4.4 1.95
32x32x1 12.0 6.2 1.93
48x48x1 17.8 7.4 2.42
64x64x1 21.3 8.2 2.59
96x96x1 32.9 13.9 2.37
100x100x1 33.1 14.2 2.33
128x128x1 41.7 17.5 2.40
192x192x1 53.4 27.6 1.95
200x200x1 54.1 31.6 1.71
256x256x1 61.3 36.0 1.71
257x257x1 57.9 39.3 1.48
384x384x1 72.3 50.1 1.45
500x500x1 77.3 60.0 1.29
512x512x1 78.3 54.5 1.44
768x768x1 87.7 66.3 1.33
1000x1000x1 91.7 78.3 1.17
1001x1001x1 90.1 77.1 1.17
1024x1024x1 91.1 70.2 1.30
1536x1536x1 98.2 81.2 1.21
2048x2048x1 100.7 80.6 1.25
3072x3072x1 102.5 87.1 1.18
4096x4096x1 102.5 81.8 1.25
4097x4097x1 101.4 82.5 1.23
1024x1024x16 87.0 69.5 1.25
1024x1024x64 88.5 70.7 1.25
1024x1024x256 92.8 72.6 1.28
4096x8x1 22.8 6.6 3.47
4096x64x1 46.3 16.2 2.87
4096x256x1 68.6 37.3 1.84
4096x256x16 59.6 39.2 1.52
4096x256x64 67.2 45.1 1.49
4096x256x256 83.0 55.4 1.50
4096x256x1024 97.4 70.5 1.38
4096x1024x1 89.6 71.8 1.25
10000x8x1 22.8 6.4 3.54
10000x100x1 53.7 18.8 2.86
10000x1000x1 91.7 76.3 1.20
10000x4000x1 103.2 85.9 1.20
100000x8x1 21.0 6.1 3.41
100000x64x1 48.2 14.5 3.33
100000x256x1 66.7 34.9 1.91
GELS double
m×n×nrhs Eigen GFLOP/s OpenBLAS GFLOP/s Eigen ÷ OpenBLAS
2x2x1 0.2 0.1 1.51
3x3x1 0.4 0.2 1.61
4x4x1 0.6 0.3 1.67
6x6x1 1.1 0.6 1.78
8x8x1 1.6 0.9 1.88
12x12x1 3.0 1.6 1.96
16x16x1 4.6 2.2 2.07
24x24x1 7.2 3.5 2.09
32x32x1 9.2 4.5 2.06
48x48x1 12.1 5.9 2.08
64x64x1 13.8 7.1 1.94
96x96x1 20.7 9.7 2.15
100x100x1 21.0 9.8 2.16
128x128x1 24.6 10.9 2.26
192x192x1 29.8 17.5 1.71
200x200x1 29.6 20.2 1.47
256x256x1 32.6 21.2 1.55
257x257x1 31.6 24.3 1.31
384x384x1 37.2 28.8 1.30
500x500x1 39.3 34.5 1.14
512x512x1 39.5 31.5 1.26
768x768x1 43.3 37.6 1.15
1000x1000x1 45.6 42.2 1.08
1001x1001x1 45.1 41.8 1.08
1024x1024x1 44.6 38.5 1.16
1536x1536x1 48.3 43.7 1.11
2048x2048x1 48.0 42.3 1.14
3072x3072x1 50.6 43.6 1.16
4096x4096x1 50.8 44.2 1.15
4097x4097x1 50.4 42.9 1.18
1024x1024x16 42.8 38.4 1.11
1024x1024x64 43.5 39.0 1.12
1024x1024x256 45.7 40.4 1.13
4096x8x1 11.4 5.2 2.18
4096x64x1 22.7 9.7 2.33
4096x256x1 34.6 21.6 1.60
4096x256x16 30.2 22.7 1.33
4096x256x64 34.1 26.2 1.30
4096x256x256 41.6 32.9 1.26
4096x256x1024 47.9 38.3 1.25
4096x1024x1 44.5 39.2 1.14
10000x8x1 10.8 5.0 2.16
10000x100x1 27.0 10.4 2.61
10000x1000x1 44.5 38.9 1.14
10000x4000x1 51.6 43.2 1.19
100000x8x1 10.5 4.9 2.17
100000x64x1 22.4 8.3 2.69
100000x256x1 32.8 19.1 1.71
SYEV float
n Eigen GFLOP/s OpenBLAS GFLOP/s Eigen ÷ OpenBLAS
2 0.9 0.7 1.32
3 0.9 0.7 1.30
4 1.1 0.9 1.21
6 1.7 1.4 1.16
8 2.2 2.1 1.09
12 3.6 3.2 1.12
16 5.1 4.4 1.16
24 7.7 6.6 1.16
32 10.4 8.5 1.23
48 15.6 9.9 1.57
64 20.3 11.8 1.72
96 27.8 15.0 1.86
100 28.0 14.2 1.97
128 33.8 16.7 2.01
192 42.0 19.2 2.18
200 42.8 20.0 2.15
256 44.8 20.4 2.19
257 43.5 21.2 2.05
384 50.7 23.4 2.17
500 52.3 21.4 2.45
512 51.6 24.4 2.11
768 56.1 26.0 2.16
1000 59.9 27.3 2.20
1001 52.7 25.3 2.08
1024 58.4 24.6 2.38
1536 60.9 25.7 2.37
2048 61.3 28.1 2.19
SYEV double
n Eigen GFLOP/s OpenBLAS GFLOP/s Eigen ÷ OpenBLAS
2 0.9 0.7 1.27
3 0.8 0.6 1.35
4 0.9 0.8 1.09
6 1.3 1.2 1.11
8 1.8 1.7 1.11
12 2.9 2.5 1.15
16 4.0 3.3 1.14
24 6.0 4.9 1.18
32 7.7 6.2 1.22
48 11.2 7.9 1.37
64 13.7 9.5 1.44
96 16.7 11.1 1.50
100 17.1 12.0 1.43
128 19.2 12.9 1.49
192 21.6 13.0 1.66
200 22.0 14.3 1.54
256 21.9 15.9 1.38
257 21.4 16.0 1.33
384 24.3 17.6 1.37
500 26.0 19.2 1.35
512 25.4 18.6 1.37
768 26.6 19.7 1.35
1000 28.1 20.8 1.35
1001 23.7 19.5 1.22
1024 27.3 18.5 1.47
1536 28.1 20.1 1.40
2048 26.2 19.7 1.33
GESDD float
m×n Eigen GFLOP/s OpenBLAS GFLOP/s Eigen ÷ OpenBLAS
2x2 2.5 0.4 6.88
3x3 1.7 0.7 2.25
4x4 2.2 1.1 1.98
6x6 2.2 1.9 1.19
8x8 2.6 2.7 0.96
12x12 3.0 4.3 0.67
16x16 5.4 5.6 0.95
24x24 8.1 7.9 0.99
32x32 11.2 12.6 0.89
48x48 17.7 18.6 0.94
64x64 25.5 26.9 0.94
96x96 40.3 36.3 1.09
100x100 41.5 36.8 1.12
128x128 52.5 46.5 1.13
192x192 76.7 50.0 1.53
200x200 78.5 50.9 1.54
256x256 86.5 49.6 1.73
257x257 90.3 57.5 1.57
384x384 114.2 64.0 1.78
500x500 132.3 78.1 1.69
512x512 123.6 65.5 1.87
768x768 147.0 78.5 1.87
1000x1000 166.0 96.6 1.72
1001x1001 165.0 96.8 1.70
1024x1024 154.4 82.1 1.87
1536x1536 173.7 96.1 1.80
2048x2048 169.6 94.8 1.78
4096x64 121.0 63.3 1.90
4096x256 166.1 106.4 1.56
4096x1024 177.1 119.9 1.48
10000x8 33.2 30.1 1.10
10000x100 150.1 70.7 2.12
10000x1000 209.3 169.9 1.23
GESDD double
m×n Eigen GFLOP/s OpenBLAS GFLOP/s Eigen ÷ OpenBLAS
2x2 2.7 0.4 7.13
3x3 1.3 0.6 1.99
4x4 1.7 1.0 1.76
6x6 1.9 1.6 1.11
8x8 1.9 2.2 0.87
12x12 2.2 3.3 0.65
16x16 4.4 4.3 0.95
24x24 5.8 6.1 0.94
32x32 7.8 9.7 0.83
48x48 12.1 14.3 0.84
64x64 15.9 20.8 0.77
96x96 23.8 28.3 0.86
100x100 25.4 29.3 0.86
128x128 30.9 35.7 0.86
192x192 42.7 38.9 1.09
200x200 44.1 38.7 1.13
256x256 48.5 39.6 1.22
257x257 50.3 44.2 1.13
384x384 62.0 51.6 1.19
500x500 71.4 60.3 1.18
512x512 67.8 51.9 1.30
768x768 78.8 64.4 1.22
1000x1000 87.3 75.2 1.15
1001x1001 86.5 76.1 1.14
1024x1024 79.6 64.1 1.24
1536x1536 88.6 75.9 1.16
2048x2048 73.1 70.0 1.04
4096x64 62.2 37.2 1.68
4096x256 83.5 62.8 1.35
4096x1024 84.9 75.6 1.18
10000x8 14.0 21.1 0.66
10000x100 76.7 38.2 2.02
10000x1000 102.3 93.4 1.12
GEEV float
n Eigen GFLOP/s OpenBLAS GFLOP/s Eigen ÷ OpenBLAS
2 2.7 0.4 6.46
3 1.6 0.6 2.92
4 2.6 0.9 2.57
6 3.4 1.6 2.03
8 5.0 2.3 2.22
12 7.7 3.6 2.15
16 10.2 4.8 2.16
24 14.4 6.8 2.12
32 18.0 8.9 2.03
48 21.6 11.9 1.81
64 23.9 13.6 1.72
96 27.1 16.8 1.60
100 26.3 17.1 1.54
128 28.5 19.9 1.42
192 29.8 33.9 0.88
200 30.3 35.2 0.86
256 29.4 41.7 0.70
257 28.1 42.3 0.66
384 31.0 59.3 0.54
500 32.3 71.8 0.45
512 30.9 50.6 0.61
768 34.0 84.0 0.39
1000 35.3 108.1 0.33
1001 32.7 109.6 0.30
1024 31.6 77.6 0.40
GEEV double
n Eigen GFLOP/s OpenBLAS GFLOP/s Eigen ÷ OpenBLAS
2 2.7 0.4 6.30
3 1.4 0.6 2.44
4 2.0 0.8 2.57
6 2.8 1.4 2.28
8 4.2 2.0 2.09
12 5.9 2.9 2.09
16 7.8 3.8 2.08
24 10.2 5.4 1.93
32 12.0 6.9 1.70
48 14.6 8.8 1.62
64 16.0 10.4 1.54
96 17.0 11.1 1.53
100 17.1 11.8 1.47
128 17.4 13.3 1.30
192 17.8 18.4 0.95
200 17.8 19.6 0.90
256 17.6 22.4 0.79
257 16.5 22.9 0.72
384 18.1 30.8 0.59
500 18.7 36.5 0.51
512 17.7 22.0 0.80
768 18.8 37.2 0.50
1000 19.4 51.6 0.38
1001 18.1 51.8 0.35
1024 12.9 36.5 0.35