Reorganize benchmarks into subdirectories and clean up Eigen sources

libeigen/eigen!2176

Co-authored-by: Rasmus Munk Larsen <rmlarsen@gmail.com>
This commit is contained in:
Rasmus Munk Larsen
2026-02-21 17:46:55 -08:00
parent 832b940976
commit d4077a6e99
34 changed files with 49 additions and 37 deletions

View File

@@ -0,0 +1 @@
eigen_add_benchmark(bench_cholesky bench_cholesky.cpp)

View File

@@ -0,0 +1,48 @@
#include <benchmark/benchmark.h>
#include <Eigen/Core>
#include <Eigen/Cholesky>
using namespace Eigen;
typedef float Scalar;
static void BM_LDLT(benchmark::State& state) {
int n = state.range(0);
typedef Matrix<Scalar, Dynamic, Dynamic> MatrixType;
typedef Matrix<Scalar, Dynamic, Dynamic> SquareMatrixType;
MatrixType a = MatrixType::Random(n, n);
SquareMatrixType covMat = a * a.adjoint();
int r = internal::random<int>(0, n - 1);
int c = internal::random<int>(0, n - 1);
Scalar acc = 0;
for (auto _ : state) {
LDLT<SquareMatrixType> cholnosqrt(covMat);
acc += cholnosqrt.matrixL().coeff(r, c);
benchmark::DoNotOptimize(acc);
}
}
BENCHMARK(BM_LDLT)->RangeMultiplier(2)->Range(4, 1500);
static void BM_LLT(benchmark::State& state) {
int n = state.range(0);
typedef Matrix<Scalar, Dynamic, Dynamic> MatrixType;
typedef Matrix<Scalar, Dynamic, Dynamic> SquareMatrixType;
MatrixType a = MatrixType::Random(n, n);
SquareMatrixType covMat = a * a.adjoint();
int r = internal::random<int>(0, n - 1);
int c = internal::random<int>(0, n - 1);
Scalar acc = 0;
for (auto _ : state) {
LLT<SquareMatrixType> chol(covMat);
acc += chol.matrixL().coeff(r, c);
benchmark::DoNotOptimize(acc);
}
double cost = 0;
for (int j = 0; j < n; ++j) {
int rem = std::max(n - j - 1, 0);
cost += 2 * (rem * j + rem + j);
}
state.counters["GFLOPS"] =
benchmark::Counter(cost, benchmark::Counter::kIsIterationInvariantRate, benchmark::Counter::kIs1000);
}
BENCHMARK(BM_LLT)->RangeMultiplier(2)->Range(4, 1500);