Revert "Clean up stableNorm"

Revert "Clean up stableNorm"

This reverts commit a1a96faf.

Leads to performance regression on large vectors which do not fit in cache.

#include <Eigen/Geometry>
#include <benchmark/benchmark.h>

void BM_StableNormVector(benchmark::State& state) {
  size_t offset = state.range(0);
  size_t n = state.range(1);
  Eigen::VectorXf vec = Eigen::VectorXf::Random(n + offset);
  float norm;
  for (auto _ : state) {
    benchmark::DoNotOptimize(norm = vec.segment(offset, n).stableNorm());
  }
}

void BM_StableNormMatrix(benchmark::State& state) {
  size_t offset = state.range(0);
  size_t n = state.range(1);
  Eigen::MatrixXf vec = Eigen::MatrixXf::Random(n + offset, n + offset);
  float norm;
  for (auto _ : state) {
    benchmark::DoNotOptimize(norm = vec.block(offset, offset, n, n).stableNorm());
  }
}

BENCHMARK(BM_StableNormVector)->ArgsProduct({
      benchmark::CreateDenseRange(0, 7, /*step=*/1),
      benchmark::CreateRange(1, 1<<26, /*multi=*/2)});

BENCHMARK(BM_StableNormMatrix)->ArgsProduct({
      benchmark::CreateDenseRange(0, 7, /*step=*/1),
      benchmark::CreateRange(1, 1<<15, /*multi=*/2)});

Merge request reports

Loading