Eigen vs. BLAS/LAPACK libraries, Raspberry Pi 5 in 32-bit mode (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 32-bit Arm (armhf) with NEON against OpenBLAS on a Raspberry Pi 5.

The cells of the 64-bit page measured again on the same board with 32-bit binaries: the Raspberry Pi 5’s Cortex-A76 executes AArch32 at the user level, and the 64-bit kernel runs 32-bit programs as they are. Eigen is built for the Armv8-A baseline in AArch32 state with NEON and hard-float calling conventions, against OpenBLAS. Arm Performance Libraries are not on this page: they provide no AArch32 build.

NEON in AArch32 state has no double-precision lanes, so Eigen’s double-precision kernels on this page run on the scalar floating-point unit, while its single-precision kernels use 4-lane NEON packets. The double-precision and single-precision results therefore differ in kind from each other, and from the 64-bit page’s.

Conditions

CPU Raspberry Pi 5 Model B Rev 1.0 (Broadcom BCM2712): four Arm Cortex-A76 cores (lscpu: Cortex-A76, r4p1) at 2.4 GHz, L1d 64 KiB and L2 512 KiB per core, L3 2 MiB shared; 8 GiB LPDDR4X
OS Raspberry Pi OS 64-bit (Debian GNU/Linux 12, bookworm), Linux 6.12.109+rpt-rpi-v8 with 32-bit compatibility (CONFIG_COMPAT), 4 KiB pages; the benchmark binaries are statically linked armhf executables
Compiler the Debian bookworm cross compiler arm-linux-gnueabihf-g++ 12.2.0, -march=armv8-a -mfpu=neon-fp-armv8 -mfloat-abi=hard -O3 -DNDEBUG, C++17
Eigen master 674e4a4e5 (5.0.1-dev), default configuration, no external BLAS. The measured tree, 3a00e9407, is that master plus the comparison harness; the library code under Eigen/ is master’s
OpenBLAS 0.3.34, cross-built with TARGET=ARMV7, static, without OpenMP (library reports ARMV7 MAX_THREADS=4); no Fortran compiler was available, so its LAPACK is the C translation of the reference LAPACK that OpenBLAS builds in that case (NOFORTRAN=1)
Threads 1 for every arm: OPENBLAS_NUM_THREADS and OMP_NUM_THREADS set to 1; Eigen built without OpenMP
Method Google Benchmark, 10 repetitions of at least 0.2 s each per cell, median of the 10 rates; the process pinned to core 3 with taskset, the performance cpufreq governor (2.4 GHz), an active cooler
Date 2026-10-26 04:13 to 16:08 (UTC−7): 17 runs, one per operation, about 11.6 hours of measurement
Harness benchmarks/comparison/run.py --machine raspberry-pi5-arm32 from Eigen merge request !2903 and the commits that add the five new operations

GEMM at n = 1024 ran at 3.5 GFLOP/s in double and 19.9 in float in Eigen, against 8.9 and 9.3 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. A ratio divides Eigen’s rate by OpenBLAS’s rate from the same binary and the same run. Eigen was measured once per cell, in that binary, so the charts carry no pass-to-pass band; the ten repetitions within a cell span at most 3 % of their median in 77 % of the cells. For the eigenvalue and singular value decompositions the 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.

Each run covered one operation, under an exclusive benchmark lock that keeps other timing jobs off the board. It started only after an idle gate (no compilers, one-minute load below 0.5, less than 0.2 of a core busy, SoC temperature below 70 °C) and was discarded and repeated if the whole machine reached 1.8 busy cores in any 4 s sample, or if the firmware’s throttle flags (vcgencmd get_throttled) changed during the run: 1 of 18 attempts was discarded (DOT: the first attempt produced no result file). The flags read 0x0 before and after every accepted run. The SoC temperature peaked at 70.5 °C during 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 core’s L1 data cache (64 KiB), its L2 cache (512 KiB) and the shared L3 cache (2 MiB).

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 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: 3.41 ns per call for Eigen against 11.3 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 32.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 17.3 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 3.10 2.26 1.88 1.82 1.35
AXPY double OpenBLAS 2.53 0.96 0.71 0.69 0.97
DOT float OpenBLAS 3.45 1.90 1.79 1.82 1.26
DOT double OpenBLAS 1.88 0.95 0.77 0.76 0.90
GEMV float OpenBLAS 2.18 1.91 2.21 3.21 –
GEMV double OpenBLAS 1.44 0.69 1.29 1.65 –
GEMM float OpenBLAS 2.09 2.02 2.12 2.24 –
GEMM double OpenBLAS 1.18 0.39 0.39 0.41 –
TRSM float OpenBLAS 2.43 1.54 1.75 1.95 –
TRSM double OpenBLAS 1.17 0.39 0.31 0.36 –
TRMM float OpenBLAS 0.67 1.42 1.82 1.93 –
TRMM double OpenBLAS 0.64 0.35 0.33 0.37 –
SYMM float OpenBLAS 1.22 1.98 2.11 2.14 –
SYMM double OpenBLAS 0.77 0.40 0.38 0.38 –
SYRK float OpenBLAS 0.82 1.62 1.93 2.11 –
SYRK double OpenBLAS 0.70 0.40 0.37 0.40 –
POTRF float OpenBLAS 1.60 1.43 1.89 2.05 –
POTRF double OpenBLAS 1.46 0.62 0.41 0.40 –
PSTRF float OpenBLAS 1.53 1.87 2.09 2.23 –
PSTRF double OpenBLAS 1.68 1.07 0.59 0.56 –
SYTRF float OpenBLAS 1.28 1.68 2.08 1.91 –
SYTRF double OpenBLAS 1.47 0.98 0.63 0.48 –
GETRF float OpenBLAS 1.70 1.71 1.93 2.00 –
GETRF double OpenBLAS 1.85 0.60 0.42 0.40 –
GEQRF float OpenBLAS 0.98 1.58 2.05 2.12 –
GEQRF double OpenBLAS 1.02 0.80 0.47 0.46 –
GELS float OpenBLAS 1.42 1.79 2.25 2.16 –
GELS double OpenBLAS 1.49 0.89 0.52 0.46 –
SYEV float OpenBLAS 2.29 1.89 1.41 1.09 –
SYEV double OpenBLAS 2.15 1.28 0.81 0.83 –
GESDD float OpenBLAS 2.35 1.16 1.62 2.25 –
GESDD double OpenBLAS 2.12 0.58 0.52 0.74 –
GEEV float OpenBLAS 3.03 1.91 0.89 – –
GEEV double OpenBLAS 2.15 0.80 0.33 – –

Observations

  • Double precision: Eigen runs at 0.3 to 0.4 times OpenBLAS on the large products. From n = 24, GEMM is 0.39 to 0.41, TRSM 0.31 to 0.39, TRMM 0.33 to 0.37, SYMM 0.38 to 0.40 and SYRK 0.37 to 0.40; POTRF and GETRF fall from 0.6 at n = 24 to 128 to 0.40 above n = 192. The same Eigen source built for AArch64, where double-precision NEON lanes exist, is level with OpenBLAS (the 64-bit page).
  • Single precision: Eigen’s NEON code leads. In float, GEMM is 2.0 to 2.2 times OpenBLAS from n = 24, SYMM 2.0 to 2.1, SYRK 1.6 to 2.1, TRSM 1.5 to 2.0, GETRF 1.7 to 2.0, GEQRF 1.6 to 2.1 and GELS 1.8 to 2.3.
  • GEMV is the exception to the double-precision pattern: Eigen is 1.3 to 1.65 times OpenBLAS in double above n = 192, and 2.2 to 3.2 times in float.
  • The new factorizations in double: PSTRF is level with OpenBLAS at n = 24 to 128 (1.07) and 0.56 to 0.59 above, SYTRF 0.98 falling to 0.48, GELS 0.89 falling to 0.46.
  • SYEV, GESDD and GEEV: SYEV is 0.8 to 1.3 times OpenBLAS in double and 1.1 to 1.9 in float; GESDD 0.52 to 0.74 in double; GEEV 0.33 in double and 0.89 in float at n = 192 to 1024.

Caveats

  • The Raspberry Pi 5 has 4 KiB pages and a small shared last-level cache (2 MiB), so rates at sizes beyond a few megabytes are largely set by the memory system; compare arms measured in the same session.
  • The binaries are 32-bit hard-float executables run by a 64-bit kernel; 32-bit userspace is not the configuration of the 64-bit page, so absolute rates and ratios on the two pages are not comparable cell by cell.
  • OpenBLAS was built without a Fortran compiler, so its LAPACK routines are the C translation of the reference LAPACK rather than the Fortran one the other pages’ OpenBLAS builds use; BLAS kernels are unaffected. OpenBLAS’s ARMV7 target is its generic 32-bit Arm target, not one tuned for the Cortex-A76.
  • The board runs the performance governor at 2.4 GHz with an active cooler; its SoC peaked at 70.5 °C and the firmware reported no throttling or under-voltage during any accepted run.
  • 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 ÷ OpenBLAS ratio. Eigen was measured once per cell, in the same binary and run as the library.

AXPY float
n Eigen GFLOP/s OpenBLAS GFLOP/s Eigen ÷ OpenBLAS
2 0.8 0.3 2.93
3 1.0 0.4 2.64
4 2.1 0.5 3.90
6 2.1 0.7 2.85
8 3.2 0.9 3.47
12 3.9 1.2 3.16
16 4.4 1.5 2.94
24 5.0 1.9 2.67
32 5.4 2.1 2.54
48 5.8 2.5 2.34
64 6.1 2.8 2.19
96 6.4 3.1 2.07
100 6.4 3.1 2.09
128 6.5 3.2 2.01
192 6.7 3.4 1.95
256 6.7 3.5 1.92
384 6.8 3.6 1.89
512 6.9 3.7 1.87
768 6.9 3.7 1.86
1000 6.9 3.7 1.85
1001 6.9 3.7 1.84
1024 6.9 3.7 1.85
1536 6.8 3.8 1.82
2048 6.9 3.8 1.81
3072 6.9 3.8 1.82
4096 6.9 3.8 1.82
6144 6.9 3.8 1.82
8192 6.9 3.8 1.82
10000 6.9 3.8 1.82
12288 6.9 3.8 1.81
16384 6.9 3.8 1.81
32768 6.9 3.8 1.80
65536 6.8 3.8 1.79
100000 6.8 3.8 1.78
131072 6.8 3.8 1.78
262144 6.7 3.8 1.76
524288 4.6 2.7 1.69
1000000 2.0 1.8 1.11
1048576 1.9 1.7 1.10
2097152 1.6 1.6 1.02
4194304 1.5 1.5 1.00
8388608 1.4 1.4 0.99
16777216 1.4 1.4 0.99
AXPY double
n Eigen GFLOP/s OpenBLAS GFLOP/s Eigen ÷ OpenBLAS
2 1.1 0.3 3.83
3 1.4 0.4 3.61
4 1.7 0.5 3.22
6 1.9 0.7 2.62
8 2.0 0.9 2.20
12 2.1 1.2 1.74
16 2.2 1.4 1.50
24 2.2 1.8 1.27
32 2.3 2.0 1.12
48 2.3 2.3 1.00
64 2.3 2.5 0.92
96 2.4 2.8 0.84
100 2.4 2.9 0.82
128 2.4 2.9 0.80
192 2.4 3.1 0.76
256 2.4 3.2 0.74
384 2.3 3.3 0.71
512 2.4 3.3 0.71
768 2.4 3.4 0.70
1000 2.4 3.4 0.70
1001 2.4 3.4 0.70
1024 2.4 3.4 0.70
1536 2.4 3.4 0.69
2048 2.4 3.4 0.69
3072 2.4 3.5 0.69
4096 2.4 3.4 0.69
6144 2.4 3.4 0.69
8192 2.4 3.5 0.69
10000 2.4 3.4 0.69
12288 2.4 3.5 0.69
16384 2.4 3.5 0.69
32768 2.4 3.5 0.69
65536 2.4 3.3 0.71
100000 2.4 3.2 0.73
131072 2.4 3.2 0.74
262144 2.1 1.3 1.70
524288 1.0 0.9 1.18
1000000 0.8 0.8 1.06
1048576 0.8 0.8 1.06
2097152 0.7 0.7 1.05
4194304 0.7 0.7 1.04
8388608 0.7 0.7 1.03
16777216 0.7 0.7 1.03
DOT float
n Eigen GFLOP/s OpenBLAS GFLOP/s Eigen ÷ OpenBLAS
2 1.3 0.4 3.60
3 1.8 0.5 3.50
4 3.7 0.7 4.95
6 2.7 1.0 2.79
8 5.3 1.3 4.01
12 6.1 1.7 3.47
16 5.1 2.1 2.40
24 5.8 2.7 2.15
32 6.1 3.1 2.00
48 6.8 3.6 1.89
64 7.5 3.9 1.89
96 8.0 4.3 1.85
100 7.6 4.4 1.75
128 8.3 4.5 1.83
192 8.0 4.6 1.75
256 8.2 4.7 1.75
384 8.8 4.7 1.86
512 8.4 4.7 1.78
768 8.8 4.7 1.86
1000 8.5 4.7 1.80
1001 8.4 4.7 1.77
1024 8.4 4.7 1.78
1536 8.7 4.7 1.85
2048 8.5 4.7 1.79
3072 8.5 4.8 1.79
4096 8.5 4.8 1.79
6144 9.0 4.8 1.89
8192 8.5 4.8 1.78
10000 8.5 4.8 1.78
12288 9.2 4.8 1.92
16384 8.5 4.8 1.79
32768 8.8 4.8 1.84
65536 8.5 4.8 1.78
100000 8.9 4.8 1.86
131072 8.6 4.8 1.80
262144 7.8 4.8 1.65
524288 6.0 4.7 1.29
1000000 4.1 4.4 0.93
1048576 4.1 4.4 0.93
2097152 3.6 3.8 0.95
4194304 3.4 3.5 0.95
8388608 3.3 3.4 0.95
16777216 3.2 3.4 0.95
DOT double
n Eigen GFLOP/s OpenBLAS GFLOP/s Eigen ÷ OpenBLAS
2 1.2 0.4 3.31
3 0.6 0.5 1.23
4 1.7 0.6 2.67
6 1.8 0.9 2.08
8 2.0 1.1 1.89
12 2.0 1.4 1.44
16 2.2 1.6 1.35
24 2.3 2.0 1.16
32 2.3 2.1 1.07
48 2.3 2.3 0.99
64 2.3 2.6 0.91
96 2.4 2.7 0.86
100 2.4 2.8 0.85
128 2.4 2.9 0.83
192 2.4 3.0 0.80
256 2.4 3.0 0.79
384 2.4 3.1 0.77
512 2.4 3.1 0.76
768 2.4 3.1 0.76
1000 2.4 3.1 0.75
1001 2.4 3.1 0.76
1024 2.4 3.2 0.75
1536 2.4 3.2 0.75
2048 2.4 3.2 0.75
3072 2.4 3.2 0.76
4096 2.4 3.2 0.76
6144 2.4 3.2 0.76
8192 2.4 3.2 0.76
10000 2.4 3.1 0.76
12288 2.4 3.2 0.75
16384 2.4 3.2 0.75
32768 2.0 3.2 0.64
65536 2.0 3.1 0.63
100000 2.2 3.2 0.70
131072 2.0 2.8 0.72
262144 2.2 2.1 1.01
524288 2.1 1.8 1.14
1000000 1.8 1.7 1.03
1048576 1.8 1.7 1.07
2097152 1.6 1.6 1.02
4194304 1.6 1.5 1.03
8388608 1.6 1.5 1.04
16777216 1.6 1.5 1.03
GEMV float
m×n Eigen GFLOP/s OpenBLAS GFLOP/s Eigen ÷ OpenBLAS
2x2 0.4 0.2 2.45
3x3 0.7 0.3 1.96
4x4 1.4 0.5 2.57
6x6 2.2 0.9 2.48
8x8 4.0 2.1 1.93
12x12 6.4 2.5 2.56
16x16 6.9 4.5 1.54
24x24 8.0 5.9 1.37
32x32 14.5 6.6 2.19
48x48 12.6 7.3 1.71
64x64 16.1 7.6 2.11
96x96 16.6 7.9 2.11
100x100 15.6 7.2 2.16
128x128 14.3 7.7 1.85
192x192 13.8 7.5 1.84
200x200 13.2 7.2 1.83
256x256 13.9 5.9 2.35
257x257 11.3 6.5 1.75
384x384 12.4 4.8 2.60
500x500 8.8 4.6 1.92
512x512 9.5 2.8 3.35
768x768 7.5 2.3 3.24
1000x1000 2.8 2.7 1.03
1001x1001 2.4 1.6 1.48
1024x1024 4.1 0.7 5.52
1536x1536 3.2 0.7 4.57
2048x2048 2.5 0.6 3.87
3072x3072 2.2 0.6 3.47
4096x4096 2.1 0.6 3.51
4097x4097 2.0 1.3 1.59
8x10000 7.5 6.8 1.10
100x10000 6.0 1.1 5.35
1000x10000 2.4 1.1 2.28
4000x10000 2.1 0.9 2.44
10000x8 13.7 6.3 2.18
10000x100 2.4 2.5 0.98
10000x1000 2.4 2.6 0.91
10000x4000 2.4 1.5 1.62
GEMV double
m×n Eigen GFLOP/s OpenBLAS GFLOP/s Eigen ÷ OpenBLAS
2x2 0.4 0.2 1.98
3x3 0.8 0.4 1.93
4x4 1.2 0.6 1.87
6x6 1.8 1.0 1.70
8x8 2.5 2.2 1.16
12x12 3.1 2.7 1.17
16x16 3.4 4.5 0.76
24x24 3.7 5.6 0.66
32x32 3.8 6.2 0.62
48x48 4.5 6.8 0.67
64x64 4.0 7.0 0.57
96x96 5.1 6.2 0.82
100x100 5.0 6.1 0.82
128x128 3.8 5.1 0.74
192x192 3.7 4.9 0.74
200x200 4.2 5.3 0.79
256x256 3.7 3.3 1.12
257x257 3.4 3.9 0.87
384x384 3.7 3.0 1.26
500x500 3.1 2.3 1.36
512x512 2.3 1.4 1.62
768x768 1.9 0.9 2.25
1000x1000 1.7 1.1 1.59
1001x1001 1.3 0.8 1.65
1024x1024 1.1 0.6 1.72
1536x1536 1.7 0.6 2.71
2048x2048 0.9 0.6 1.57
3072x3072 1.1 0.6 1.79
4096x4096 0.6 0.4 1.44
4097x4097 0.6 0.5 1.12
8x10000 3.6 5.7 0.64
100x10000 2.3 0.8 2.90
1000x10000 1.9 0.7 2.64
4000x10000 1.3 0.5 2.63
10000x8 3.4 2.6 1.28
10000x100 0.7 0.9 0.79
10000x1000 2.6 1.1 2.43
10000x4000 2.6 0.9 2.79
GEMM float
m×n×k Eigen GFLOP/s OpenBLAS GFLOP/s Eigen ÷ OpenBLAS
2x2x2 0.4 0.1 3.78
3x3x3 0.7 0.3 2.23
4x4x4 2.9 0.7 4.16
6x6x6 2.1 1.6 1.28
8x8x8 4.5 2.9 1.53
12x12x12 8.4 5.2 1.61
16x16x16 9.9 6.3 1.56
24x24x24 14.1 7.5 1.88
32x32x32 15.2 8.0 1.90
48x48x48 17.6 8.6 2.05
64x64x64 17.8 8.8 2.02
96x96x96 19.3 9.0 2.14
100x100x100 18.9 9.1 2.07
128x128x128 19.5 9.2 2.12
160x160x160 19.6 9.3 2.11
192x192x192 19.9 9.3 2.14
200x200x200 19.8 9.3 2.13
224x224x224 19.9 9.4 2.13
256x256x256 19.9 9.3 2.14
257x257x257 19.7 9.1 2.15
288x288x288 20.0 9.3 2.15
320x320x320 19.1 9.3 2.05
384x384x384 19.0 9.4 2.03
448x448x448 19.1 9.3 2.04
500x500x500 19.0 9.3 2.05
512x512x512 19.1 9.2 2.07
768x768x768 19.9 9.2 2.15
1000x1000x1000 20.1 9.2 2.18
1001x1001x1001 20.1 9.1 2.20
1024x1024x1024 19.9 9.3 2.15
1536x1536x1536 20.4 9.3 2.20
2048x2048x2048 20.4 9.2 2.22
3072x3072x3072 20.6 9.2 2.24
4096x4096x4096 20.7 9.1 2.26
4097x4097x4097 20.8 9.1 2.29
64x64x1024 18.2 9.0 2.01
64x1024x64 18.4 9.0 2.05
256x256x1024 18.9 9.3 2.04
1024x64x64 18.4 9.0 2.04
1024x256x256 19.5 9.3 2.10
4096x96x96 17.3 9.0 1.93
4096x128x128 17.7 9.1 1.95
4096x144x144 17.9 9.1 1.96
4096x160x160 18.2 9.1 1.99
4096x176x176 18.4 9.2 2.00
8192x128x128 17.1 9.0 1.90
10000x8x8 11.4 6.6 1.72
10000x100x100 16.7 9.0 1.86
10000x1000x1000 20.3 9.2 2.19
10000x4000x4000 20.8 9.1 2.28
GEMM double
m×n×k Eigen GFLOP/s OpenBLAS GFLOP/s Eigen ÷ OpenBLAS
2x2x2 0.5 0.1 5.09
3x3x3 0.9 0.3 3.04
4x4x4 1.1 0.7 1.64
6x6x6 1.5 1.6 0.93
8x8x8 1.9 2.9 0.65
12x12x12 2.4 5.0 0.48
16x16x16 2.7 6.2 0.44
24x24x24 3.0 7.4 0.40
32x32x32 3.2 7.8 0.41
48x48x48 3.3 8.5 0.39
64x64x64 3.4 8.6 0.39
96x96x96 3.5 9.0 0.39
100x100x100 3.5 9.0 0.39
128x128x128 3.5 8.9 0.39
160x160x160 3.5 9.0 0.39
192x192x192 3.5 9.0 0.39
200x200x200 3.5 9.1 0.39
224x224x224 3.5 9.1 0.38
256x256x256 3.4 9.0 0.38
257x257x257 3.4 8.9 0.38
288x288x288 3.5 9.0 0.38
320x320x320 3.5 9.0 0.38
384x384x384 3.5 8.9 0.39
448x448x448 3.5 8.9 0.39
500x500x500 3.5 8.8 0.40
512x512x512 3.5 8.8 0.40
768x768x768 3.5 8.8 0.40
1000x1000x1000 3.6 8.9 0.40
1001x1001x1001 3.6 8.8 0.41
1024x1024x1024 3.5 8.9 0.40
1536x1536x1536 3.6 8.9 0.40
2048x2048x2048 3.6 8.7 0.41
3072x3072x3072 3.6 8.8 0.41
4096x4096x4096 3.6 8.5 0.42
4097x4097x4097 3.6 8.5 0.42
64x64x1024 3.1 8.8 0.36
64x1024x64 3.4 8.8 0.39
256x256x1024 3.4 9.0 0.38
1024x64x64 3.4 8.8 0.38
1024x256x256 3.4 8.7 0.39
4096x96x96 3.2 8.4 0.38
4096x128x128 3.3 8.3 0.40
4096x144x144 3.3 8.4 0.40
4096x160x160 3.3 8.5 0.39
4096x176x176 3.4 8.5 0.39
8192x128x128 3.3 8.3 0.40
10000x8x8 2.4 6.5 0.37
10000x100x100 3.4 8.6 0.39
10000x1000x1000 3.6 8.9 0.40
10000x4000x4000 3.6 8.8 0.41
TRSM float
m×n Eigen GFLOP/s OpenBLAS GFLOP/s Eigen ÷ OpenBLAS
2x2 0.1 0.1 1.76
3x3 0.3 0.2 2.00
4x4 1.2 0.4 3.33
6x6 1.7 0.7 2.50
8x8 3.3 1.1 2.97
12x12 4.7 1.9 2.46
16x16 5.7 2.4 2.35
24x24 6.9 3.4 2.04
32x32 7.5 4.0 1.86
48x48 8.1 5.0 1.62
64x64 8.5 5.7 1.49
96x96 8.8 6.5 1.35
100x100 8.8 6.7 1.32
128x128 9.0 7.0 1.28
192x192 11.1 7.7 1.45
200x200 11.9 7.8 1.53
256x256 14.3 8.0 1.78
257x257 14.0 8.0 1.75
384x384 14.4 8.5 1.70
500x500 15.6 8.6 1.81
512x512 15.5 8.6 1.80
768x768 16.0 8.7 1.84
1000x1000 16.6 8.8 1.90
1001x1001 16.4 8.7 1.89
1024x1024 16.1 8.8 1.83
1536x1536 17.0 8.9 1.91
2048x2048 17.2 8.9 1.92
3072x3072 17.6 9.0 1.96
4096x4096 17.8 9.0 1.98
4097x4097 18.0 9.0 2.00
64x4096 8.4 5.8 1.46
256x4096 13.5 7.6 1.78
1024x8 7.2 5.9 1.22
1024x64 14.8 8.5 1.75
1024x256 16.4 8.8 1.86
1024x4096 15.8 8.6 1.84
4096x8 5.8 6.5 0.89
4096x64 14.9 8.8 1.70
4096x256 17.7 9.1 1.95
4096x1024 18.0 9.1 1.97
TRSM double
m×n Eigen GFLOP/s OpenBLAS GFLOP/s Eigen ÷ OpenBLAS
2x2 0.1 0.1 1.88
3x3 0.3 0.2 2.04
4x4 0.6 0.4 1.51
6x6 0.7 0.7 1.09
8x8 1.1 1.1 0.96
12x12 1.3 1.8 0.74
16x16 1.5 2.3 0.65
24x24 1.7 3.2 0.53
32x32 1.8 3.9 0.46
48x48 2.0 4.8 0.41
64x64 2.0 5.4 0.37
96x96 2.1 6.3 0.33
100x100 2.2 6.4 0.34
128x128 2.1 6.8 0.31
192x192 2.2 7.5 0.29
200x200 2.2 7.5 0.29
256x256 2.2 7.8 0.28
257x257 2.1 7.7 0.28
384x384 2.6 8.2 0.32
500x500 2.6 8.2 0.31
512x512 2.6 8.1 0.32
768x768 2.8 8.3 0.33
1000x1000 2.7 8.4 0.33
1001x1001 2.7 8.2 0.33
1024x1024 2.9 8.3 0.34
1536x1536 2.9 8.5 0.34
2048x2048 3.0 8.4 0.36
3072x3072 3.0 8.6 0.35
4096x4096 3.1 8.3 0.37
4097x4097 3.1 8.4 0.36
64x4096 2.0 5.1 0.39
256x4096 2.1 6.6 0.32
1024x8 1.7 5.3 0.32
1024x64 2.7 8.1 0.33
1024x256 2.9 8.5 0.34
1024x4096 2.8 8.1 0.35
4096x8 1.4 5.2 0.26
4096x64 2.7 8.1 0.34
4096x256 3.1 8.5 0.36
4096x1024 3.1 8.6 0.36
TRMM float
m×n Eigen GFLOP/s OpenBLAS GFLOP/s Eigen ÷ OpenBLAS
2x2 0.0 0.1 0.51
3x3 0.1 0.2 0.50
4x4 0.2 0.4 0.57
6x6 0.5 0.8 0.64
8x8 1.2 1.6 0.77
12x12 2.6 2.9 0.88
16x16 3.6 3.8 0.94
24x24 5.7 5.1 1.12
32x32 7.2 5.9 1.23
48x48 9.6 6.9 1.40
64x64 10.7 7.4 1.44
96x96 12.9 8.0 1.63
100x100 12.7 8.1 1.57
128x128 13.7 8.3 1.65
192x192 13.9 8.7 1.60
200x200 15.1 8.7 1.73
256x256 16.1 8.7 1.84
257x257 15.9 8.7 1.82
384x384 16.3 9.0 1.81
500x500 17.0 9.0 1.89
512x512 16.6 9.0 1.84
768x768 16.9 9.0 1.88
1000x1000 17.4 9.0 1.93
1001x1001 17.2 9.0 1.92
1024x1024 16.2 9.0 1.81
1536x1536 16.9 9.1 1.86
2048x2048 17.2 9.1 1.89
3072x3072 17.9 9.1 1.96
4096x4096 17.8 9.1 1.96
4097x4097 17.7 9.1 1.96
64x4096 7.9 7.7 1.03
256x4096 11.3 8.2 1.37
1024x8 7.3 5.8 1.24
1024x64 15.6 8.6 1.81
1024x256 17.5 9.0 1.94
1024x4096 15.5 8.8 1.75
4096x8 5.8 6.4 0.91
4096x64 15.3 8.8 1.74
4096x256 18.3 9.1 2.01
4096x1024 18.2 9.2 1.98
TRMM double
m×n Eigen GFLOP/s OpenBLAS GFLOP/s Eigen ÷ OpenBLAS
2x2 0.1 0.1 0.91
3x3 0.2 0.2 0.81
4x4 0.3 0.4 0.76
6x6 0.5 0.8 0.67
8x8 0.8 1.4 0.57
12x12 1.2 2.6 0.45
16x16 1.4 3.4 0.43
24x24 1.7 4.5 0.39
32x32 1.9 5.0 0.39
48x48 2.2 6.2 0.35
64x64 2.3 6.7 0.34
96x96 2.4 7.4 0.32
100x100 2.4 7.5 0.32
128x128 2.4 7.5 0.32
192x192 2.5 8.2 0.31
200x200 2.5 8.2 0.31
256x256 2.5 8.3 0.30
257x257 2.5 8.2 0.30
384x384 2.8 8.5 0.33
500x500 2.8 8.4 0.34
512x512 2.8 8.3 0.33
768x768 3.0 8.3 0.35
1000x1000 2.9 8.4 0.35
1001x1001 2.9 8.3 0.35
1024x1024 2.9 8.4 0.35
1536x1536 3.0 8.5 0.35
2048x2048 3.0 8.4 0.36
3072x3072 3.2 8.5 0.37
4096x4096 3.1 8.3 0.38
4097x4097 3.1 8.4 0.37
64x4096 1.5 6.3 0.24
256x4096 2.0 7.0 0.29
1024x8 1.8 5.0 0.36
1024x64 2.9 8.2 0.35
1024x256 3.1 8.6 0.36
1024x4096 2.9 8.0 0.36
4096x8 1.4 5.2 0.26
4096x64 2.9 8.1 0.35
4096x256 3.2 8.5 0.38
4096x1024 3.1 8.5 0.37
SYMM float
m×n Eigen GFLOP/s OpenBLAS GFLOP/s Eigen ÷ OpenBLAS
2x2 0.1 0.1 1.30
3x3 0.3 0.3 0.91
4x4 1.0 0.7 1.39
6x6 1.5 1.6 0.93
8x8 3.7 2.8 1.33
12x12 6.6 4.9 1.36
16x16 8.5 6.0 1.42
24x24 12.8 7.1 1.78
32x32 14.0 7.7 1.81
48x48 17.2 8.3 2.07
64x64 16.1 8.6 1.87
96x96 19.4 8.9 2.18
100x100 18.8 9.0 2.10
128x128 19.1 9.1 2.10
192x192 19.2 9.2 2.09
200x200 19.7 9.3 2.13
256x256 19.8 9.2 2.15
257x257 19.5 9.1 2.15
384x384 19.1 9.3 2.05
500x500 19.1 9.2 2.07
512x512 19.1 9.2 2.07
768x768 19.4 9.2 2.10
1000x1000 19.7 9.2 2.14
1001x1001 19.5 9.1 2.14
1024x1024 19.4 9.2 2.11
1536x1536 19.7 9.2 2.13
2048x2048 19.6 9.2 2.13
3072x3072 19.6 9.2 2.14
4096x4096 19.7 9.1 2.16
4097x4097 19.6 9.1 2.16
64x4096 15.4 8.9 1.72
256x4096 18.2 9.0 2.02
1024x8 7.6 5.3 1.44
1024x64 16.9 8.5 1.98
1024x256 19.3 9.1 2.12
1024x4096 19.5 9.2 2.12
4096x8 5.0 4.4 1.12
4096x64 15.2 8.2 1.86
4096x256 19.2 9.1 2.12
4096x1024 19.7 9.2 2.14
SYMM double
m×n Eigen GFLOP/s OpenBLAS GFLOP/s Eigen ÷ OpenBLAS
2x2 0.2 0.1 1.59
3x3 0.3 0.3 1.06
4x4 0.7 0.7 1.03
6x6 1.1 1.6 0.74
8x8 1.7 2.8 0.63
12x12 2.2 4.8 0.46
16x16 2.6 5.9 0.44
24x24 2.9 7.1 0.41
32x32 3.1 7.5 0.41
48x48 3.3 8.3 0.39
64x64 3.3 8.5 0.39
96x96 3.4 8.9 0.39
100x100 3.4 8.9 0.39
128x128 3.5 8.8 0.39
192x192 3.5 9.0 0.39
200x200 3.5 9.0 0.38
256x256 3.4 9.0 0.38
257x257 3.4 8.9 0.38
384x384 3.4 8.9 0.38
500x500 3.4 8.8 0.39
512x512 3.4 8.8 0.39
768x768 3.3 8.9 0.38
1000x1000 3.3 8.9 0.37
1001x1001 3.3 8.8 0.38
1024x1024 3.3 8.8 0.37
1536x1536 3.3 8.9 0.37
2048x2048 3.3 8.7 0.38
3072x3072 3.3 8.8 0.37
4096x4096 3.2 8.5 0.38
4097x4097 3.2 8.5 0.38
64x4096 3.1 8.4 0.36
256x4096 3.3 8.3 0.40
1024x8 2.0 4.7 0.44
1024x64 3.0 8.1 0.37
1024x256 3.3 8.7 0.38
1024x4096 3.3 8.7 0.38
4096x8 1.2 3.2 0.38
4096x64 2.9 7.3 0.39
4096x256 3.3 8.5 0.38
4096x1024 3.3 8.7 0.38
SYRK float
n×k Eigen GFLOP/s OpenBLAS GFLOP/s Eigen ÷ OpenBLAS
2x2 0.0 0.1 0.69
3x3 0.1 0.2 0.72
4x4 0.3 0.4 0.81
6x6 0.5 0.8 0.58
8x8 1.4 1.5 0.96
12x12 3.0 2.8 1.06
16x16 4.2 4.0 1.03
24x24 7.3 5.7 1.30
32x32 9.1 6.6 1.37
48x48 12.3 7.7 1.60
64x64 13.5 8.2 1.64
96x96 16.1 8.6 1.87
100x100 15.8 8.7 1.81
128x128 16.9 8.9 1.89
192x192 18.2 9.1 2.00
200x200 18.1 9.2 1.98
256x256 18.2 9.1 1.99
257x257 17.9 9.0 1.99
384x384 16.8 9.3 1.82
500x500 16.2 9.3 1.75
512x512 16.7 9.3 1.80
768x768 17.7 9.2 1.92
1000x1000 18.2 9.2 1.97
1001x1001 18.2 9.1 2.00
1024x1024 18.5 9.2 2.01
1536x1536 19.0 9.2 2.05
2048x2048 19.0 9.2 2.06
3072x3072 19.4 9.2 2.11
4096x4096 19.6 9.2 2.13
4097x4097 20.0 9.1 2.20
64x4096 13.7 8.6 1.59
256x4096 16.1 9.2 1.75
1024x4096 18.5 9.2 2.01
4096x8 8.7 5.0 1.72
4096x64 18.6 8.9 2.10
4096x256 19.3 9.1 2.12
4096x1024 19.5 9.2 2.12
SYRK double
n×k Eigen GFLOP/s OpenBLAS GFLOP/s Eigen ÷ OpenBLAS
2x2 0.1 0.1 0.99
3x3 0.1 0.2 0.87
4x4 0.3 0.3 0.88
6x6 0.5 0.8 0.65
8x8 0.9 1.4 0.65
12x12 1.4 2.7 0.52
16x16 1.9 3.9 0.48
24x24 2.4 5.5 0.43
32x32 2.6 6.2 0.43
48x48 2.9 7.6 0.39
64x64 3.1 8.0 0.39
96x96 3.3 8.6 0.38
100x100 3.3 8.7 0.38
128x128 3.3 8.6 0.38
192x192 3.4 8.9 0.38
200x200 3.4 8.9 0.38
256x256 3.2 8.9 0.36
257x257 3.2 8.8 0.36
384x384 3.2 9.0 0.36
500x500 3.3 8.9 0.37
512x512 3.3 8.9 0.37
768x768 3.4 8.8 0.38
1000x1000 3.4 8.8 0.39
1001x1001 3.4 8.7 0.39
1024x1024 3.4 8.8 0.38
1536x1536 3.5 8.9 0.39
2048x2048 3.5 8.7 0.40
3072x3072 3.5 8.8 0.40
4096x4096 3.5 8.5 0.41
4097x4097 3.5 8.5 0.41
64x4096 2.7 8.3 0.32
256x4096 3.2 8.9 0.36
1024x4096 3.4 8.8 0.39
4096x8 2.6 2.0 1.29
4096x64 3.4 8.0 0.43
4096x256 3.5 8.3 0.42
4096x1024 3.5 8.5 0.41
POTRF float
n Eigen GFLOP/s OpenBLAS GFLOP/s Eigen ÷ OpenBLAS
2 0.1 0.0 2.71
3 0.2 0.1 2.20
4 0.3 0.2 1.76
6 0.5 0.3 1.39
8 0.6 0.5 1.26
12 1.1 0.9 1.20
16 1.5 1.3 1.22
24 2.4 2.0 1.21
32 3.2 2.5 1.27
48 4.7 3.0 1.59
64 5.4 3.7 1.46
96 7.1 4.8 1.48
100 7.3 4.8 1.53
128 8.6 5.6 1.54
192 10.5 6.4 1.65
200 10.7 6.4 1.66
256 13.0 7.0 1.86
257 12.6 6.9 1.82
384 15.3 7.7 1.99
500 16.0 8.0 2.01
512 16.1 8.0 2.00
768 17.0 8.4 2.03
1000 16.7 8.5 1.97
1001 16.5 8.4 1.96
1024 16.3 8.4 1.93
1536 17.0 8.6 1.97
2048 17.6 8.7 2.02
3072 18.2 8.9 2.05
4096 18.7 8.9 2.10
4097 18.6 8.8 2.10
POTRF double
n Eigen GFLOP/s OpenBLAS GFLOP/s Eigen ÷ OpenBLAS
2 0.1 0.0 2.81
3 0.2 0.1 2.23
4 0.3 0.2 1.63
6 0.4 0.3 1.29
8 0.6 0.5 1.15
12 0.9 0.9 0.99
16 1.1 1.2 0.93
24 1.5 1.8 0.84
32 1.9 2.3 0.81
48 2.4 2.7 0.86
64 1.9 3.4 0.55
96 2.1 4.5 0.48
100 2.1 4.4 0.48
128 2.3 5.2 0.45
192 2.5 6.0 0.41
200 2.5 6.0 0.42
256 2.8 6.6 0.43
257 2.8 6.5 0.43
384 3.0 7.3 0.41
500 3.1 7.6 0.40
512 3.1 7.5 0.41
768 3.1 7.8 0.40
1000 3.2 8.0 0.39
1001 3.1 7.9 0.40
1024 3.1 7.9 0.39
1536 3.2 8.2 0.39
2048 3.2 8.1 0.40
3072 3.3 8.4 0.39
4096 3.3 8.2 0.40
4097 3.3 8.2 0.40
PSTRF float
n Eigen GFLOP/s OpenBLAS GFLOP/s Eigen ÷ OpenBLAS
2 0.0 0.0 1.51
3 0.1 0.1 1.57
4 0.1 0.1 1.56
6 0.2 0.2 1.47
8 0.3 0.2 1.50
12 0.6 0.4 1.49
16 0.8 0.5 1.60
24 1.3 0.8 1.71
32 1.9 1.0 1.80
48 2.8 1.5 1.90
64 3.7 1.9 1.92
96 5.1 2.6 1.94
100 5.2 2.7 1.90
128 6.3 3.2 1.97
192 8.2 4.1 2.01
200 8.4 4.2 2.00
256 9.5 4.5 2.11
257 9.3 4.7 2.00
384 11.4 5.4 2.12
500 12.6 6.0 2.10
512 12.4 5.4 2.29
768 13.6 6.4 2.13
1000 13.6 6.7 2.02
1001 13.4 6.8 1.98
1024 12.1 5.4 2.25
1536 13.3 6.1 2.19
2048 12.8 5.6 2.30
3072 14.5 6.4 2.25
4096 14.3 6.1 2.34
4097 15.1 7.2 2.10
PSTRF double
n Eigen GFLOP/s OpenBLAS GFLOP/s Eigen ÷ OpenBLAS
2 0.1 0.0 1.98
3 0.1 0.1 2.04
4 0.2 0.1 1.81
6 0.3 0.2 1.62
8 0.3 0.2 1.56
12 0.5 0.4 1.48
16 0.7 0.5 1.39
24 1.0 0.8 1.31
32 1.3 1.0 1.27
48 1.7 1.4 1.20
64 2.1 1.8 1.15
96 2.6 2.5 1.06
100 2.1 2.6 0.81
128 2.2 2.8 0.79
192 2.5 3.6 0.68
200 2.5 3.8 0.65
256 2.6 3.8 0.69
257 2.6 4.2 0.61
384 2.8 4.9 0.56
500 2.8 5.5 0.52
512 2.8 4.6 0.60
768 2.9 5.3 0.55
1000 2.9 5.4 0.53
1001 2.8 5.8 0.49
1024 2.8 4.6 0.61
1536 2.9 5.2 0.56
2048 2.9 4.7 0.62
3072 3.0 5.8 0.53
4096 3.0 5.0 0.60
4097 3.1 6.1 0.50
SYTRF float
n Eigen GFLOP/s OpenBLAS GFLOP/s Eigen ÷ OpenBLAS
2 0.0 0.0 1.56
3 0.1 0.1 1.29
4 0.2 0.1 1.27
6 0.3 0.2 1.17
8 0.4 0.4 1.12
12 0.7 0.5 1.27
16 1.0 0.7 1.34
24 1.4 1.1 1.30
32 2.0 1.3 1.50
48 2.7 1.7 1.63
64 3.4 2.0 1.72
96 5.2 2.8 1.86
100 5.5 2.9 1.87
128 6.4 3.3 1.97
192 8.2 4.1 2.01
200 8.6 4.2 2.05
256 9.2 4.4 2.10
257 9.7 4.7 2.07
384 11.1 5.5 2.04
500 12.7 5.9 2.14
512 11.4 4.7 2.41
768 13.2 6.3 2.09
1000 13.9 6.8 2.03
1001 13.8 6.9 2.01
1024 11.1 5.7 1.94
1536 12.9 6.4 2.01
2048 11.7 6.6 1.78
3072 13.7 7.2 1.90
4096 13.4 7.2 1.86
4097 15.3 7.6 2.02
SYTRF double
n Eigen GFLOP/s OpenBLAS GFLOP/s Eigen ÷ OpenBLAS
2 0.1 0.0 1.75
3 0.1 0.1 1.57
4 0.2 0.1 1.45
6 0.3 0.2 1.49
8 0.5 0.3 1.41
12 0.7 0.5 1.30
16 0.8 0.6 1.33
24 1.1 0.9 1.21
32 1.3 1.2 1.10
48 1.6 1.6 0.97
64 1.7 1.9 0.93
96 2.5 2.7 0.92
100 2.5 2.7 0.93
128 2.5 2.8 0.87
192 2.8 3.7 0.74
200 2.8 3.9 0.73
256 2.7 3.1 0.86
257 2.9 4.0 0.72
384 3.0 4.7 0.64
500 3.0 5.4 0.56
512 2.8 4.1 0.68
768 2.9 5.0 0.59
1000 3.0 6.2 0.48
1001 3.0 6.0 0.49
1024 2.8 5.1 0.55
1536 2.9 5.9 0.50
2048 2.9 5.9 0.50
3072 3.1 6.7 0.47
4096 3.0 6.5 0.47
4097 3.2 6.9 0.46
GETRF float
n Eigen GFLOP/s OpenBLAS GFLOP/s Eigen ÷ OpenBLAS
2 0.1 0.0 2.11
3 0.1 0.1 1.93
4 0.2 0.1 1.71
6 0.5 0.3 1.66
8 0.7 0.4 1.65
12 1.0 0.7 1.49
16 1.2 0.9 1.43
24 2.2 1.4 1.56
32 3.0 1.8 1.65
48 4.4 2.6 1.71
64 5.6 3.2 1.74
96 7.2 4.1 1.74
100 7.4 4.2 1.74
128 9.0 4.8 1.85
192 10.8 5.8 1.85
200 10.9 5.9 1.84
256 12.8 6.4 1.99
257 12.5 6.4 1.96
384 14.5 7.2 2.02
500 15.2 7.6 2.01
512 15.1 7.6 1.99
768 15.6 8.0 1.96
1000 15.4 8.2 1.89
1001 15.2 8.1 1.88
1024 14.7 8.1 1.81
1536 16.0 8.4 1.92
2048 16.7 8.5 1.97
3072 17.5 8.7 2.02
4096 17.6 8.7 2.02
4097 17.8 8.6 2.06
GETRF double
n Eigen GFLOP/s OpenBLAS GFLOP/s Eigen ÷ OpenBLAS
2 0.1 0.0 2.77
3 0.2 0.1 2.32
4 0.3 0.1 2.07
6 0.5 0.3 1.81
8 0.7 0.4 1.65
12 1.0 0.7 1.42
16 1.2 0.9 1.31
24 1.2 1.5 0.83
32 1.5 1.9 0.77
48 1.7 2.7 0.64
64 1.9 3.3 0.58
96 2.1 4.3 0.50
100 2.1 4.4 0.49
128 2.4 4.9 0.49
192 2.6 5.9 0.44
200 2.6 5.9 0.44
256 2.8 6.4 0.44
257 2.8 6.3 0.44
384 2.9 7.1 0.42
500 3.0 7.3 0.41
512 3.0 7.2 0.41
768 3.0 7.2 0.41
1000 3.0 7.4 0.40
1001 3.0 7.3 0.41
1024 3.0 7.3 0.41
1536 3.1 7.7 0.40
2048 3.1 7.8 0.40
3072 3.2 8.2 0.39
4096 3.3 8.0 0.41
4097 3.3 8.0 0.41
GEQRF float
m×n Eigen GFLOP/s OpenBLAS GFLOP/s Eigen ÷ OpenBLAS
2x2 0.1 0.0 1.04
3x3 0.1 0.1 0.97
4x4 0.1 0.1 0.96
6x6 0.3 0.3 0.95
8x8 0.4 0.4 0.95
12x12 0.7 0.8 0.98
16x16 1.1 1.1 1.00
24x24 1.8 1.6 1.11
32x32 2.5 2.0 1.23
48x48 3.7 2.6 1.40
64x64 4.5 3.0 1.52
96x96 6.4 3.4 1.91
100x100 6.5 3.4 1.91
128x128 8.1 3.6 2.28
192x192 10.4 4.9 2.10
200x200 10.6 5.4 1.98
256x256 12.0 5.7 2.11
257x257 11.7 6.0 1.95
384x384 14.0 6.7 2.08
500x500 14.8 7.3 2.03
512x512 14.7 7.1 2.06
768x768 15.5 7.6 2.04
1000x1000 15.9 7.8 2.04
1001x1001 15.8 7.7 2.05
1024x1024 15.4 7.5 2.06
1536x1536 16.3 7.7 2.11
2048x2048 16.3 7.6 2.13
3072x3072 16.9 7.9 2.14
4096x4096 16.6 7.8 2.13
4097x4097 16.7 8.0 2.08
4096x8 6.0 1.9 3.17
4096x64 10.7 3.6 2.96
4096x256 11.5 5.8 1.97
4096x1024 14.0 7.6 1.85
10000x8 6.6 1.9 3.47
10000x100 11.1 3.7 3.01
10000x1000 15.9 7.9 2.00
10000x4000 17.4 8.2 2.14
100000x8 4.5 1.8 2.53
100000x64 8.2 2.5 3.33
100000x256 10.3 4.7 2.19
GEQRF double
m×n Eigen GFLOP/s OpenBLAS GFLOP/s Eigen ÷ OpenBLAS
2x2 0.1 0.0 1.11
3x3 0.1 0.1 1.04
4x4 0.1 0.1 1.00
6x6 0.3 0.3 0.99
8x8 0.4 0.4 0.98
12x12 0.7 0.7 1.00
16x16 1.0 1.0 1.01
24x24 1.4 1.5 0.95
32x32 1.7 1.9 0.91
48x48 2.1 2.4 0.85
64x64 2.3 2.8 0.82
96x96 2.1 3.1 0.68
100x100 2.1 3.1 0.68
128x128 2.3 3.1 0.74
192x192 2.6 4.5 0.58
200x200 2.6 4.9 0.52
256x256 2.7 5.3 0.51
257x257 2.7 5.6 0.48
384x384 2.9 6.3 0.46
500x500 2.9 6.7 0.43
512x512 2.9 6.5 0.45
768x768 3.0 6.7 0.44
1000x1000 3.0 6.9 0.44
1001x1001 3.0 6.8 0.44
1024x1024 3.0 6.6 0.45
1536x1536 3.1 6.9 0.45
2048x2048 3.1 6.8 0.46
3072x3072 3.2 7.1 0.45
4096x4096 3.2 6.5 0.49
4097x4097 3.2 6.9 0.46
4096x8 1.7 1.5 1.19
4096x64 2.4 3.2 0.75
4096x256 2.7 4.7 0.57
4096x1024 3.0 6.5 0.46
10000x8 1.8 1.5 1.21
10000x100 2.5 1.9 1.32
10000x1000 3.1 7.1 0.44
10000x4000 3.3 7.5 0.44
100000x8 1.0 0.9 1.13
100000x64 2.1 1.2 1.65
100000x256 2.6 3.0 0.86
GELS float
m×n×nrhs Eigen GFLOP/s OpenBLAS GFLOP/s Eigen ÷ OpenBLAS
2x2x1 0.1 0.0 1.75
3x3x1 0.1 0.1 1.55
4x4x1 0.1 0.1 1.44
6x6x1 0.3 0.2 1.38
8x8x1 0.4 0.3 1.32
12x12x1 0.7 0.5 1.30
16x16x1 1.0 0.7 1.29
24x24x1 1.7 1.2 1.38
32x32x1 2.3 1.6 1.46
48x48x1 3.4 2.1 1.61
64x64x1 4.3 2.5 1.71
96x96x1 6.2 3.0 2.08
100x100x1 6.3 3.0 2.08
128x128x1 7.9 3.3 2.43
192x192x1 10.2 4.0 2.53
200x200x1 10.5 4.4 2.39
256x256x1 11.9 4.9 2.44
257x257x1 11.6 5.1 2.27
384x384x1 13.9 6.0 2.32
500x500x1 14.6 6.6 2.19
512x512x1 14.5 6.6 2.22
768x768x1 15.2 7.2 2.11
1000x1000x1 15.7 7.4 2.12
1001x1001x1 15.3 7.4 2.08
1024x1024x1 15.3 7.2 2.14
1536x1536x1 16.3 7.5 2.17
2048x2048x1 16.3 7.5 2.18
3072x3072x1 17.0 7.8 2.18
4096x4096x1 16.6 7.7 2.16
4097x4097x1 16.7 7.9 2.11
1024x1024x16 15.0 7.2 2.09
1024x1024x64 15.2 7.3 2.08
1024x1024x256 15.7 7.6 2.07
4096x8x1 6.1 1.4 4.24
4096x64x1 10.3 3.3 3.14
4096x256x1 11.3 5.2 2.17
4096x256x16 9.1 5.4 1.68
4096x256x64 10.5 6.0 1.75
4096x256x256 12.8 6.4 2.01
4096x256x1024 15.3 7.1 2.14
4096x1024x1 14.1 7.3 1.92
10000x8x1 6.6 1.5 4.54
10000x100x1 11.0 3.4 3.20
10000x1000x1 15.5 7.6 2.04
10000x4000x1 17.5 8.1 2.17
100000x8x1 4.2 1.4 2.98
100000x64x1 8.0 2.3 3.46
100000x256x1 10.2 4.3 2.38
GELS double
m×n×nrhs Eigen GFLOP/s OpenBLAS GFLOP/s Eigen ÷ OpenBLAS
2x2x1 0.1 0.0 1.91
3x3x1 0.1 0.1 1.68
4x4x1 0.1 0.1 1.56
6x6x1 0.3 0.2 1.42
8x8x1 0.4 0.3 1.37
12x12x1 0.7 0.5 1.32
16x16x1 0.9 0.7 1.28
24x24x1 1.3 1.1 1.16
32x32x1 1.6 1.5 1.07
48x48x1 2.0 2.0 0.97
64x64x1 2.2 2.4 0.91
96x96x1 2.0 2.8 0.73
100x100x1 2.1 2.8 0.73
128x128x1 2.3 2.9 0.78
192x192x1 2.5 3.7 0.68
200x200x1 2.5 4.1 0.62
256x256x1 2.6 4.5 0.59
257x257x1 2.7 4.7 0.56
384x384x1 2.8 5.6 0.50
500x500x1 2.9 6.2 0.47
512x512x1 2.8 5.9 0.48
768x768x1 2.9 6.3 0.46
1000x1000x1 3.0 6.6 0.45
1001x1001x1 3.0 6.5 0.46
1024x1024x1 3.0 6.3 0.47
1536x1536x1 3.1 6.7 0.45
2048x2048x1 3.0 6.6 0.46
3072x3072x1 3.2 7.0 0.45
4096x4096x1 3.1 6.3 0.49
4097x4097x1 3.2 6.8 0.46
1024x1024x16 2.9 6.4 0.46
1024x1024x64 2.9 6.5 0.45
1024x1024x256 3.0 6.8 0.43
4096x8x1 1.7 1.2 1.40
4096x64x1 2.3 2.9 0.81
4096x256x1 2.6 4.3 0.61
4096x256x16 2.3 4.5 0.51
4096x256x64 2.5 5.0 0.50
4096x256x256 2.8 5.2 0.53
4096x256x1024 3.0 5.7 0.53
4096x1024x1 3.0 6.2 0.48
10000x8x1 1.7 1.2 1.42
10000x100x1 2.5 1.9 1.35
10000x1000x1 3.1 6.9 0.46
10000x4000x1 3.3 7.4 0.44
100000x8x1 1.1 0.9 1.24
100000x64x1 2.0 1.2 1.65
100000x256x1 2.5 2.8 0.91
SYEV float
n Eigen GFLOP/s OpenBLAS GFLOP/s Eigen ÷ OpenBLAS
2 0.2 0.1 1.73
3 0.3 0.1 2.34
4 0.4 0.2 2.40
6 0.6 0.3 2.52
8 0.8 0.3 2.50
12 1.2 0.5 2.39
16 1.5 0.7 2.24
24 2.1 1.0 2.15
32 2.6 1.2 2.07
48 3.2 1.6 2.00
64 3.7 2.0 1.86
96 4.2 2.4 1.76
100 4.3 2.5 1.75
128 4.7 2.8 1.71
192 5.1 3.2 1.58
200 5.2 3.4 1.55
256 5.4 3.6 1.51
257 5.3 3.6 1.50
384 5.7 3.9 1.46
500 5.9 4.2 1.40
512 5.8 4.1 1.41
768 5.9 4.3 1.37
1000 5.7 4.5 1.26
1001 5.7 4.5 1.25
1024 5.5 4.4 1.25
1536 5.0 4.5 1.12
2048 4.7 4.5 1.07
SYEV double
n Eigen GFLOP/s OpenBLAS GFLOP/s Eigen ÷ OpenBLAS
2 0.3 0.1 1.78
3 0.3 0.1 2.10
4 0.3 0.1 2.36
6 0.5 0.2 2.38
8 0.7 0.3 2.39
12 0.9 0.4 2.17
16 1.1 0.6 1.98
24 1.5 0.8 1.79
32 1.7 1.1 1.59
48 1.9 1.4 1.34
64 2.2 1.8 1.22
96 2.4 2.2 1.08
100 2.4 2.2 1.09
128 2.5 2.5 1.00
192 2.8 3.0 0.94
200 2.8 3.1 0.91
256 3.0 3.3 0.91
257 2.7 3.3 0.80
384 2.8 3.7 0.76
500 3.1 3.8 0.82
512 3.0 3.9 0.77
768 3.2 4.1 0.78
1000 3.0 4.0 0.75
1001 3.0 4.0 0.74
1024 3.0 3.9 0.76
1536 2.7 3.3 0.83
2048 2.4 2.9 0.84
GESDD float
m×n Eigen GFLOP/s OpenBLAS GFLOP/s Eigen ÷ OpenBLAS
2x2 0.7 0.1 7.52
3x3 0.7 0.2 4.29
4x4 0.7 0.2 3.43
6x6 0.8 0.4 2.10
8x8 0.7 0.5 1.36
12x12 0.8 0.8 1.00
16x16 1.4 1.1 1.26
24x24 1.8 1.5 1.19
32x32 2.6 2.6 0.98
48x48 4.0 3.3 1.20
64x64 5.4 5.0 1.07
96x96 8.5 6.9 1.23
100x100 8.8 7.1 1.23
128x128 11.0 9.0 1.23
192x192 15.6 11.2 1.39
200x200 16.1 11.6 1.39
256x256 18.0 12.4 1.45
257x257 18.4 13.2 1.39
384x384 22.2 14.0 1.58
500x500 24.3 15.6 1.56
512x512 23.5 13.3 1.77
768x768 25.6 13.9 1.84
1000x1000 24.1 14.5 1.65
1001x1001 23.9 14.4 1.66
1024x1024 21.9 9.7 2.26
1536x1536 21.7 10.1 2.15
2048x2048 20.4 8.7 2.35
4096x64 21.2 10.1 2.11
4096x256 26.7 14.3 1.87
4096x1024 26.4 12.4 2.12
10000x8 4.3 5.7 0.75
10000x100 27.3 10.4 2.63
10000x1000 33.9 17.2 1.97
GESDD double
m×n Eigen GFLOP/s OpenBLAS GFLOP/s Eigen ÷ OpenBLAS
2x2 0.7 0.1 7.85
3x3 0.5 0.1 3.57
4x4 0.5 0.2 2.90
6x6 0.5 0.3 1.80
8x8 0.6 0.4 1.40
12x12 0.6 0.6 0.93
16x16 0.9 0.9 1.00
24x24 1.2 1.2 0.93
32x32 1.5 2.2 0.67
48x48 1.9 2.8 0.66
64x64 2.1 4.3 0.50
96x96 2.8 5.9 0.47
100x100 2.9 6.1 0.48
128x128 3.5 7.4 0.48
192x192 4.3 9.3 0.47
200x200 4.4 9.9 0.45
256x256 4.9 10.1 0.48
257x257 4.9 11.0 0.45
384x384 5.6 11.6 0.48
500x500 5.9 12.5 0.47
512x512 5.7 10.2 0.56
768x768 5.9 9.7 0.61
1000x1000 5.9 10.4 0.57
1001x1001 5.9 10.1 0.59
1024x1024 5.4 7.8 0.69
1536x1536 6.0 7.7 0.78
2048x2048 5.2 7.5 0.70
4096x64 5.1 8.9 0.57
4096x256 6.1 11.8 0.51
4096x1024 5.8 10.5 0.55
10000x8 2.2 4.9 0.44
10000x100 6.0 5.8 1.03
10000x1000 6.9 15.2 0.46
GEEV float
n Eigen GFLOP/s OpenBLAS GFLOP/s Eigen ÷ OpenBLAS
2 0.7 0.1 7.75
3 0.5 0.2 3.29
4 0.8 0.3 3.14
6 1.1 0.4 2.40
8 1.5 0.6 2.54
12 2.1 0.9 2.33
16 2.5 1.2 2.06
24 3.4 1.6 2.06
32 3.9 2.0 1.91
48 4.8 2.5 1.91
64 5.4 2.9 1.83
96 6.1 3.2 1.94
100 6.3 3.3 1.92
128 6.7 3.7 1.79
192 7.4 5.5 1.34
200 7.3 5.9 1.23
256 7.5 6.6 1.14
257 7.4 6.8 1.09
384 8.2 8.6 0.96
500 8.6 10.0 0.85
512 7.6 8.3 0.92
768 8.4 10.7 0.79
1000 7.6 12.4 0.61
1001 7.1 12.3 0.57
1024 6.3 9.6 0.65
GEEV double
n Eigen GFLOP/s OpenBLAS GFLOP/s Eigen ÷ OpenBLAS
2 0.8 0.1 8.27
3 0.4 0.2 2.57
4 0.5 0.2 2.22
6 0.7 0.4 1.82
8 0.8 0.5 1.60
12 1.0 0.8 1.28
16 1.2 1.0 1.21
24 1.5 1.4 1.04
32 1.5 1.7 0.86
48 1.6 2.1 0.79
64 1.7 2.4 0.72
96 1.8 2.4 0.75
100 1.8 2.5 0.74
128 1.9 2.6 0.73
192 1.9 3.9 0.50
200 2.0 4.2 0.48
256 2.0 4.6 0.44
257 2.0 4.8 0.42
384 2.0 6.1 0.34
500 2.0 6.9 0.30
512 1.9 5.5 0.35
768 1.8 6.7 0.26
1000 1.7 8.0 0.22
1001 1.7 7.6 0.22
1024 1.5 6.9 0.23