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)});