| // SPDX-FileCopyrightText: The Eigen Authors | |
| // SPDX-License-Identifier: MPL-2.0 | |
| #include <benchmark/benchmark.h> | |
| #include <Eigen/Core> | |
| #include <Eigen/Cholesky> | |
| using namespace Eigen; | |
| #ifndef SCALAR | |
| #define SCALAR float | |
| #endif | |
| typedef SCALAR 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); |